【发布时间】:2018-01-07 14:42:21
【问题描述】:
我有一组(大部分)具有共享参数但进程不同的函数。我想使用装饰器将每个参数的描述添加到函数的标题级文档字符串中。
我试图通过在appender 中合并一个嵌套函数来模仿this answer 中的结构,但失败了。我也试过functools.partial,但有点不对劲。
我的尝试:
def appender(func, *args):
"""Appends additional parameter descriptions to func's __doc__."""
def _doc(func):
params = ''.join([defaultdocs[arg] for arg in args])
func.__doc__ += '\n' + params
return func
return _doc
defaultdocs = {
'a' :
"""
a : int, default 0
the first parameter
""",
'b' :
"""
b : int, default 1
the second parameter
"""
}
@appender('a')
def f(a):
"""Title-level docstring."""
return a
@appender('a', 'b')
def g(a, b):
"""Title-level docstring."""
return a + b
这失败了,我相信它失败了,因为传递给appender 的第一个参数被解释为func。因此,当我查看 g 的结果文档字符串时,我得到:
print(g.__doc__)
Title-level docstring.
b : int, default 1
the second parameter
因为,当我希望*args 成为*args 的第一个元素时,'a' 再次被解释为'func'。我该如何纠正这个问题?
想要的结果:
print(g.__doc__)
Title-level docstring.
a : int, default 0
the first parameter
b : int, default 1
the second parameter
【问题讨论】:
标签: python python-3.x decorator docstring