作为代理类实现的Decorator无法修饰类级方法函数....为什么?

时间:2014-06-16 15:57:01

标签: python python-decorators

我正在阅读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)

0 个答案:

没有答案