在sphinx的autodoc中覆盖函数声明

Mic*_*x2a 10 python documentation python-sphinx

我有一个类似这样的模块:

#!/usr/bin/env python

#: Documentation here.
#: blah blah blah
foobar = r'Some really long regex here.'

def myfunc(val=foobar):
    '''Blah blah blah'''
    pass
Run Code Online (Sandbox Code Playgroud)

...我有一个.rst类似这样的文件:

:mod:`my_module` Module
-----------------------

..automodule:: my_module
    :members:
    :private-members:
    :show-inheritance:
Run Code Online (Sandbox Code Playgroud)

当我构建文档时,我得到一个带有代码片段的html文件,如下所示:

mymodule.foobar.foob​​ar = '这里有一些荒谬漫长而丑陋的正则表达式'

这里有额外的文档

MyModule的.myfunc(val ='这里有一些荒谬漫长而丑陋的正则表达式')

等等等等等等

基于这个stackoverflow帖子,我想我可以通过改变我的模块来改变它:

#!/usr/bin/env python

#: .. data:: my_module.foobar
#: Extra documentation here
foobar = 'Some really long regex here.'

def myfunc(val=foobar):
    '''.. function:: my_module.myfunc(val=foobar)

    Blah blah blah'''
    pass
Run Code Online (Sandbox Code Playgroud)

......但是那并没有做到这一点,只是将丑陋的签名作为身体的一部分附加.有谁知道我怎么能正确地覆盖它?

(我正在使用Sphinx v1.1.3,顺便说一下.)

mzj*_*zjn 14

您有一个模块级变量,用作函数中关键字参数的默认值.Sphinx在函数签名中显示该变量的值(而不是名称).另一个问题讨论了这个问题,OP也在GitHub上提交了一张关于它的问题单.

但是,您可以通过两种方式解决此问题:

  1. 使用链接覆盖.rst文件中的签名autofunction,如链接问题的答案中所述.

  2. 如果docstring的第一行看起来像签名,并且autodoc_docstring_signature配置变量设置为True(默认情况下是这样),那么Sphinx将使用该行作为签名.

    因此,如果您的文档字符串如下所示,

    def myfunc(val=foobar):
        '''myfunc(val=foobar)
    
        Blah blah blah'''
        pass
    
    Run Code Online (Sandbox Code Playgroud)

    它应该以你想要的方式工作.

    在这个问题中,你在docstring中有第一行:

    .. function:: my_module.myfunc(val=foobar) 
    
    Run Code Online (Sandbox Code Playgroud)

    这不起作用,因为它看起来不像是一个合适的签名.

  • 你可以通过在`autofunction`之后的`.rst`文件中将所需的函数签名放在`.. autofunction :: myfunc(val = foobar)`这样你的实际文档字符串更具人性可读性.适合我 (2认同)