在使用装饰器包装时让sphinx显示函数参数

时间:2014-08-03 08:28:19

标签: python python-sphinx autodoc

我使用 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)

测试文档

文档有效,但函数参数没有....

有什么想法吗?希望我清楚自己

1 个答案:

答案 0 :(得分:1)

this answer

  

functools.wraps仅保留__name____doc____module__。要保留签名,请查看Michele Simionato的Decorator module

这是一种解决方法而不是解决方法,但每the documentation(强调我的):

  

可以覆盖明确记录的签名   具有常规语法的可调用对象(函数,方法,类)   这将覆盖从内省中获得的签名:

.. autoclass:: Noodle(type)

   .. automethod:: eat(persona)  
     

如果方法的签名被隐藏,则此选项非常有用   装饰器。

     

版本0.4中的新内容。

显然,"数百个功能" ......