Python 装饰器处理文档字符串
我在使用带有装饰器的文档字符串时遇到问题。给出以下示例:
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< /code> 被装饰器包装,因此函数对象不再是函数
foo
。但是,有什么好的解决方案可以按预期获取文档字符串(和帮助)呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用 functools.wraps() 更新装饰器的属性:
另请参阅 functools 的标准库文档。
Use
functools.wraps()
to update the attributes of the decorator:Also see the Standard Library documentation for
functools
.我找到了一个解决方案,但不知道它是否真的很好:
_decorator.__name__=f.__name__
的部分看起来有点丑陋......你觉得怎么样?I found a solution, but don't know if it's really nice:
The part with
_decorator.__name__=f.__name__
seems a little bit hideous... What do you think?看一下
functools.wraps
:http://docs.python .org/library/functools.htmlTake a look at
functools.wraps
: http://docs.python.org/library/functools.html解决方案非常简单。文档字符串应该在主函数之上调用的最顶层装饰器中提及。查找下面的示例:
---or----
因此,必须在 wrap4 装饰器函数 中提及 Doc String,才能使其在 main 函数中可见。
The solution is pretty easy. The doc string should be mentioned in the top most decorator that is being called on top of the main function. Find the example below:
---or----
So, the Doc String must be mentioned in the wrap4 decorator function for it to be visible in the main function.