我在与装饰器一起使用docstrings时遇到问题。给出以下示例:
def decorator(f): def _decorator(): print 'decorator active' f() return _decorator @decorator def foo(): '''the magic foo function''' print 'this is function foo' help(foo)
现在,该帮助未foo像预期那样向我显示文档字符串,而是显示:
foo
Help on function _decorator in module __main__: _decorator()
没有装饰器,帮助是正确的:
Help on function foo in module __main__: foo() the magic foo function
我知道,该函数foo由装饰器包装,因此该函数对象不再是该函数foo。但是,按预期方式获得文档字符串(和帮助)的最佳解决方案是什么?
使用functools.wraps()更新装饰的属性:
functools.wraps()
from functools import wraps def decorator(f): @wraps(f) def _decorator(): print 'decorator active' f() return _decorator @decorator def foo(): '''the magic foo function''' print 'this is function foo' help(foo)
另请参阅标准库文件的functools。
functools