Ale*_*lex 5 python decorator class-method python-2.7
我有一段代码,我想在其中使用装饰器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()
Run Code Online (Sandbox Code Playgroud)
当我注释掉@mydeco
代码行时,即42
打印文本。当包含这个装饰器时,我有几个问题:
使用更简单的行时,return wrapper
我收到错误
TypeError: 'classmethod' object is not callable
Run Code Online (Sandbox Code Playgroud)如何正确地做到这一点,即,在给定的示例中,原始函数被返回而不被更改。
当使用更复杂的调用return functools.update_wrapper(wrapper, function)
来保留一些原始函数时,我得到了错误
AttributeError: 'classmethod' object has no attribute '__module__'
Run Code Online (Sandbox Code Playgroud)我不确定这个错误是否与第一个问题有关,但对我来说它看起来是一个不同的问题。欢迎任何解决这些问题的具体建议。
上面的例子并没有真正“做”某事,它只是展示我遇到的问题的最小可能的例子。
这对你不起作用有什么原因吗?
import functools
def mydeco(function):
def wrapper(*args, **kwargs):
return function(*args, **kwargs)
return functools.update_wrapper(wrapper, function)
class BaseClass(object):
@classmethod
@mydeco
def foo(cls):
return "42"
print BaseClass.foo()
42
Run Code Online (Sandbox Code Playgroud)