python中的函数修饰器是否隐式调用了修饰函数?

时间:2013-09-12 03:52:05

标签: python function decorator function-object

我的头衔可能会产生误导。我的问题来自这段代码。

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.

这是什么函数对象,另一个函数和原始函数?

1 个答案:

答案 0 :(得分:1)

“功能对象”是aFunction。 “另一个功能”是myDecorator。 “原始函数”实际上应该是“原始函数名称”,在这种情况下将是“aFunction”。

def aFunction(...)
   ...

aFunction = myDecorator(aFunction)