可以在函数定义期间动态创建docstring吗?

时间:2016-02-27 20:49:12

标签: python docstring

以下代码存在一个小问题:

docs = {}

def register(func):
    docs[func] = func.__doc__
    return func

@register
def blue():
    """Color function."""
    pass

@register
def red():
    pass
red.__doc__ = blue.__doc__

print("docstring real:", red.__doc__)
print("docstring registered:", docs[red]) # None!

red函数从blue函数获取其文档字符串。但在装饰者注册之后会发生

我可以为register装饰器添加一个可选参数,但这种情况不够特别。看起来我必须复制并粘贴字符串。没问题......除了我还在想是否有一个我忽略的微不足道的修复。

更新:在意识到@decorator只是语法糖之后我找到了解决方法:

# @register
def red():
    pass
red.__doc__ = blue.__doc__
red = register(red)

这解决了我的问题。

在函数定义之后仍然创建docstring。有关原始问题的答案,请参阅idjaw添加的评论。

0 个答案:

没有答案