您应该返回包装函数本身, 而不是其结果 :
def tsfunc(func): def wrappedFunc(): print '%s() called' % func.__name__ return func() return wrappedFunc # Do not call the function, return a reference instead
装饰器将装饰的物品替换为装饰器的返回值:
@tsfuncdef foo(): # ....
等效于:
def foo(): # ....foo = tsfunc(foo)
扩展为(在您的代码中):
foo = wrappedFunc()
因此,您是
foo使用
wrappedFunc()调用结果而不是
wrappedFunc自身替换函数。



