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....."
Run Code Online (Sandbox Code Playgroud)
输出:
inside myDecorator.__init__()
inside aFunction()
main starts.....
inside myDecorator.__call__()
main ends.....
Run Code Online (Sandbox Code Playgroud)
关于上述代码,我无法理解以下几点:
为什么"主要开始...."不是第一行打印?
假设我从aFunction()返回一些值,那么它将无法代替其调用,因为aFunction()它被替换为inside myDecorator.__call__()not inside aFunction().
装饰器语法:
@myDecorator
def aFunction():
…
Run Code Online (Sandbox Code Playgroud)
相当于:
def aFunction():
…
aFunction = myDecorator(aFunction)
Run Code Online (Sandbox Code Playgroud)
如果myDecorator是一个类,那么__init__在定义函数时你会期望被调用.然后使用该类的实例代替该函数.当你调用它时,你会期望__call__被调用,所以这就是f()应该去的地方.
| 归档时间: |
|
| 查看次数: |
588 次 |
| 最近记录: |