我正在阅读Mark Lutz的学习Python。我目前正在回顾第32章,第1部分,讨论装饰器和元类。 Lutz声明下面的类不能用于装饰类级方法函数。我可以看到这是真的,但我在构思原因方面遇到了一些麻烦。据我所知,在__call__
方法中,self等于t,tracer和args的实例相等(a,b,c)。不应self.func(*args)
解决
tracer.func(t,a,b,c)
?相反,在我称之为自我的方法内部等于1.为什么会这样?
class tracer:
def __init__(self,f):
self.counter = 0
self.func = f
def __call__(self,*args):
self.counter += 1
return self.func(*args)
class Test:
@tracer
def spam(self,*args):
print(a+b+c)
t = Test()
t.spam(1,2,3)
t.spam(1,2,3)
t.spam(1,2,3)