class myDecorator(object):
def __init__(self, f):
print "inside myDecorator.__init__()"
f() # Prove that function definition has completed
def __call__(self):
print "inside myDecorator.__call__()"
@myDecorator
def aFunction():
print "inside aFunction()"
def main():
print "main starts....."
aFunction()
print "main ends....."
输出:
inside myDecorator.__init__()
inside aFunction()
main starts.....
inside myDecorator.__call__()
main ends.....
我无法理解上述代码的以下几点:
aFunction()
被替换为 inside myDecorator.__call__()
而不是 inside aFunction()
。 最佳答案
装饰器语法:
@myDecorator
def aFunction():
…
相当于:
def aFunction():
…
aFunction = myDecorator(aFunction)
如果
myDecorator
是一个类,那么您会期望在定义函数时调用 __init__
。然后使用类的实例代替函数。当你调用它时,你会期望 __call__
被调用,所以这就是对 f()
的调用应该去的地方。