jjhdq 发表于 2018-9-27 11:31:17

Python关于修饰符修饰对象(不能为类)的理解疑惑

"Python 的修饰符"“......只可以在模块或类定义内对函数进行修饰,不允许修饰一个类。......” ('小甲鱼'在练习中的注解)。但下面这个例子中,难道不算是在对一个类修饰吗?(Timeslong是一个类名啊。。。)

class Timeslong():
    def __init__(self,func):
      self.f = func
    def __call__(self):
      start = time.clock()
      print('It\'s time starting!')
      self.f()
      print('It\'s time ending!')
      end = time.clock()
      return "It\'s used:%s ."%(end - start)

import time
@Timeslong
def f():
    y = 0
    for i in range(10):
      y = y+i+1
      print(y)
    return y
print(f())

alltolove 发表于 2018-9-27 13:54:14

他其实是修饰类里面的__init__函数

jjhdq 发表于 2018-9-27 14:25:34

哦。。。虽一时还不能领悟,且按这思路细细去体会,希望自己能早点开惑。谢谢指教。

mizai 发表于 2018-9-27 15:59:48

一般来说修饰器用方法来实现,也可以用类来实现(上面的例子)
用类来实现修饰器就可以借用类的一些特性来做点特别的东西。

但无论哪种实现方式,被修饰的只能是方法

@Timeslong #这是用类的方式来实现的修饰器
def f(): #这是被修饰的方法

jjhdq 发表于 2018-9-29 16:11:50

mizai 发表于 2018-9-27 15:59
一般来说修饰器用方法来实现,也可以用类来实现(上面的例子)
用类来实现修饰器就可以借用类的一些特性来 ...

谢谢
页: [1]
查看完整版本: Python关于修饰符修饰对象(不能为类)的理解疑惑