是否可以在Sphinx中隐藏Python函数参数?

时间:2015-05-30 05:23:22

标签: python python-sphinx

假设我具有Numpydoc style中记录的以下功能,并且文档是使用Sphinx autofunction directive自动生成的:

def foo(x, y, _hidden_argument=None):
    """
    Foo a bar.

    Parameters
    ----------
    x: str
        The first argument to foo.
    y: str
        The second argument to foo.

    Returns
    -------
    The barred foo.

    """
    if _hidden_argument:
        _end_users_shouldnt_call_this_function(x, y)
    return x + y

我不想将隐藏的参数作为我的公共API的一部分进行宣传,但它会显示在我自动生成的文档中。有没有办法告诉Sphinx忽略一个函数的特定参数,或者(甚至更好)让它自动忽略带有前导下划线的参数?

3 个答案:

答案 0 :(得分:5)

我认为在Sphinx中有一个选项。在不必破解代码的情况下实现此目的的一种可能方法是使用自定义签名。

在这种情况下,您需要以下内容:

.. autofunction:: some_module.foo(x, y)

这将覆盖函数的参数列表,并在doc中隐藏不需要的参数。

答案 1 :(得分:4)

可以在autodoc-process-signature事件的处理程序中编辑函数签名。

事件处理程序的signature参数包含签名;一个(parameter_1, parameter_2)形式的字符串。在下面的代码段中,split()用于删除函数的最后一个参数:

hidden = "_hidden_argument"

def process_sig(app, what, name, obj, options, signature, return_annotation):
    if signature and hidden in signature:
        signature = signature.split(hidden)[0] + ")" 
    return (signature, return_annotation)

def setup(app):
    app.connect("autodoc-process-signature", process_sig)

结果是文档会将问题中的函数签名显示为foo(x, y)而不是foo(x, y, _hidden_argument=None)

答案 2 :(得分:1)

我同意这可能是设计不佳的征兆-但我遇到了不得不插入无用的**kwargs参数只是为了满足mypy静态类型检查器的情况...

因此,根据mzjn的建议,我发布了一个简单的sphix扩展以隐藏文档中的参数:

https://pypi.org/project/sphinxcontrib-autodoc-filterparams/