Understanding how class decorators work in Python
我对理解Python中的类修饰符如何工作有一个问题。在本例中,我想编写一个修饰符,它计算调用递归函数(搜索最大公因数)的次数。我有个装修师:
1 2 3 4 5 6 7 8 9 10 11 12 | class TrackCalls(object): def __init__(self, func): self.func = func self.calls = 0 def __call__(self,*args,**kwargs): self.calls += 1 return self.func(*args, **kwargs) def called(self): return self.calls |
和一个函数:
1 2 3 4 5 6 7 8 9 | @TrackCalls def NWD(a, b): if a > b: return NWD(a-b, b) elif b > a: return NWD(a, b-a) else: return a |
然后我叫他们:
1 2 | print(NWD(60,25)) #5 print(NWD.called()) #6 |
nwd函数到底发生了什么?据我所知,修饰符取了一个函数并生成了另一个函数,所以在这种情况下,trackcalls取了这个函数,生成了一个trackcalls类的对象,然后通过调用
我认为你的困惑可以追溯到python的duck输入概念。这是指从外部的角度来看,使用
在您的示例中,
为了回答你的问题,你用