【发布时间】:2012-09-11 15:58:05
【问题描述】:
我无法理解为什么会发生以下情况。我有一个装饰器,它除了检查函数是否是方法之外什么都不做。我以为我已经理解了 Python 中的方法是什么,但显然情况并非如此:
import inspect
def deco(f):
def g(*args):
print inspect.ismethod(f)
return f(*args)
return g
class Adder:
@deco
def __call__(self, a):
return a + 1
class Adder2:
def __call__(self, a):
return a + 2
Adder2.__call__ = deco(Adder2.__call__)
现在,运行以下命令:
>>> a = Adder()
>>> a(1)
False
2
>>> a2 = Adder2()
>>> a2(1)
True
3
我希望这段代码打印两次 True。
那么,像在 Adder2 中那样手动装饰函数不完全等同于通过 @deco 函数进行装饰?
有人可以这么高兴并解释为什么会发生这种情况吗?
【问题讨论】:
标签: python class methods decorator python-decorators