【发布时间】:2019-11-19 03:35:05
【问题描述】:
每当我在类定义之外装饰一个类的方法并使用它时,它都会抛出一个 TypeError 说以类实例作为第一个参数的未绑定方法。
我正在使用 setattr() 方法设置装饰方法。例如:
class A(object):
@classmethod
def demo_method(cls, a):
print a
def decorator(function):
from functools import wraps
@wraps(function)
def wrapper(*args, **kwargs):
return_value = function(*args, **kwargs)
return return_value
return wrapper
setattr(A, 'demo_method', decorator(A.demo_method))
A.demo_method(1)
它会抛出以下错误:
TypeErrorTraceback (most recent call last)
<ipython-input-13-447ee51677f4> in <module>()
17 setattr(A, 'demo_method', decorator(A.demo_method))
18
---> 19 A.demo_method(1)
20
TypeError: unbound method demo_method() must be called with A instance as first argument (got int instance instead)
【问题讨论】:
-
适用于我的 Python 3.5:ideone.com/iPhNnk(但在 Python 2.7 上失败:ideone.com/3I0Qaz)
-
我正在使用 Python 2.7 @Adam.Er8。 2.7有什么解决方案吗?
标签: python python-2.7 python-decorators