在sphinx的autodoc中覆盖函数声明

我有一个这样的模块:

#!/usr/bin/env python #: Documentation here. #: blah blah blah foobar = r'Some really long regex here.' def myfunc(val=foobar): '''Blah blah blah''' pass 

…我有一个.rst文件,就像这样:

 :mod:`my_module` Module ----------------------- ..automodule:: my_module :members: :private-members: :show-inheritance: 

当我构build文档时,我得到一个html代码片段,代码如下:

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

这里额外的文件

MyModule的。 myfuncval ='这里有一些荒谬漫长而丑陋的正则expression式'

等等等等等等

基于这个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 

…但这并没有办法,只是附加了我想要在丑陋之下的签名作为身体的一部分。 有谁知道我可以如何正确地覆盖这个?

(我使用Sphinx v1.1.3,顺便说一句)

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

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

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

  2. 如果文档string的第一行看起来像一个签名,并且autodoc_docstring_signatureconfigurationvariables设置为True (默认情况下),那么Sphinx将使用该行作为签名。

    所以如果你有一个如下所示的文档string,

     def myfunc(val=foobar): '''myfunc(val=foobar) Blah blah blah''' pass 

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

    在这个问题中,你在文档string中有第一行:

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

    这不起作用,因为它看起来不像一个正确的签名。