我的头衔可能会产生误导。我的问题来自这段代码。
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()"
print "Finished decorating aFunction()"
#aFunction()
当我执行上面的代码时,我得到输出为
inside myDecorator.__init__()
inside aFunction()
Finished decorating aFunction()
然而,我认为输出应该只是
Finished decorating aFunction()
只是修饰函数,调用构造函数并执行myDecorator对象。我的印象是只有在调用aFunction()
时才会执行装饰器模式。为什么会这样?
关于装饰者的另一个问题:
此link将装饰器解释为@ is just a little syntax sugar meaning "pass a function object through another function and assign the result to the original function.
这是什么函数对象,另一个函数和原始函数?
答案 0 :(得分:1)
“功能对象”是aFunction
。 “另一个功能”是myDecorator
。 “原始函数”实际上应该是“原始函数名称”,在这种情况下将是“aFunction”。
def aFunction(...)
...
aFunction = myDecorator(aFunction)