我有一些代码,我想在 a 上使用装饰器,classmethod
如下所示:
import functools
def mydeco(function):
@classmethod
def wrapper(cls):
return function(cls)
return functools.update_wrapper(wrapper, function)
# return wrapper
class BaseClass(object):
@classmethod
@mydeco
def foo(cls):
return "42"
print BaseClass.foo()
当我注释掉@mydeco
代码行时,即42
打印文本。当包括这个装饰器时,我有几个问题:
当使用更简单的线时,
return wrapper
我得到了错误TypeError: 'classmethod' object is not callable
如何正确地做到这一点,即在给定的示例中,返回原始函数而不进行更改。
当使用更复杂的调用
return functools.update_wrapper(wrapper, function)
来保留一些原始功能时,我得到了错误AttributeError: 'classmethod' object has no attribute '__module__'
我不确定这个错误是否与第一个问题有关,但对我来说它看起来是一个不同的问题。欢迎任何解决这些问题的具体建议。
上面的示例并没有真正“做”某事,它只是显示我遇到的问题的最小可能示例。