小编典典

Python装饰器处理文档字符串

python

我在与装饰器一起使用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像预期那样向我显示文档字符串,而是显示:

Help on function _decorator in module __main__:

_decorator()

没有装饰器,帮助是正确的:

Help on function foo in module __main__:

foo()
    the magic foo function

我知道,该函数foo由装饰器包装,因此该函数对象不再是该函数foo。但是,按预期方式获得文档字符串(和帮助)的最佳解决方案是什么?


阅读 172

收藏
2020-12-20

共1个答案

小编典典

使用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

2020-12-20