我使用 sphinx 来记录项目,并且在装饰器中包含的函数出现问题。我已经看到类似的问题,但没有解决方案似乎适合我的问题
我有数百个函数都包含在自定义装饰器中,它本身可以接受参数
from functools import wraps
def CustomFunctionDecorator(id, name):
"""Custom decorator"""
def outer(f):
@wraps(f)
def inner(*args, **kwargs):
...do stuff....
f(*args, **kwargs)
return inner
return outer
我的功能将如下所示
@CustomFunctionDecorator(123, 'Test')
def TestFunction(a, b, c=None):
"""Test Documentation"""
..do something....
现在,当我使用sphinx和autodoc生成我的文档时,我在CustomFunctionDecorator中包含的所有函数都隐藏了sphinx文档中函数的实际参数,并显示为
TestFunction(*args, **kwargs)
测试文档
文档有效,但函数参数没有....
有什么想法吗?希望我清楚自己
答案 0 :(得分:1)
functools.wraps
仅保留__name__
,__doc__
和__module__
。要保留签名,请查看Michele Simionato的Decorator module。
这是一种解决方法而不是解决方法,但每the documentation(强调我的):
可以覆盖明确记录的签名 具有常规语法的可调用对象(函数,方法,类) 这将覆盖从内省中获得的签名:
.. autoclass:: Noodle(type) .. automethod:: eat(persona)
如果方法的签名被隐藏,则此选项非常有用 装饰器。强>
版本0.4中的新内容。
显然,"数百个功能" ......