我有一個函數集合(主要是)共享參數但不同的進程。我想使用裝飾器將每個參數的描述添加到函數的標題級別文檔字符串中。具有參數的裝飾器
我試圖通過在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
,因爲再次,'a'
被解釋爲'func'
時,我希望它是*args
的第一要素。我該如何解決這個問題?
期望的結果:
print(g.__doc__)
Title-level docstring.
a : int, default 0
the first parameter
b : int, default 1
the second parameter