在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。 foobar = '这里有一些荒谬漫长而丑陋的正则expression式'
这里额外的文件
MyModule的。 myfunc ( val ='这里有一些荒谬漫长而丑陋的正则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上提交了一个问题单 。
但是,您可以通过两种方法解决此问题:
-
如在链接问题的答案中所述,使用
autofunction
覆盖.rst文件中的签名。 -
如果文档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)
这不起作用,因为它看起来不像一个正确的签名。