当前位置: 首页 > 面试题库 >

覆盖autodoc中的sphinx函数声明

盛琪
2023-03-14
问题内容

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

#!/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:

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

mymodule.foobar。 foob​​ar = ‘这里有些长而丑陋的正则表达式’

额外的文档在这里

mymodule。 myfuncval =’这里有些长而丑陋的正则表达式’

等等等等等等

基于这个帖子),我认为可以通过将模块更改为以下内容来对其进行更改:

#!/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,顺便说一句。)


问题答案:

您有一个模块级变量,该变量用作函数中关键字参数的默认值。Sphinx在函数签名中显示该变量的值(而不是名称)。这个问题将在问题中进行讨论,OP还已在GitHub上提交了有关此问题的问题单。

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

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

  2. 如果文档字符串的第一行看起来像签名,并且如果autodoc_docstring_signature配置变量设置为True(默认情况下),则Sphinx将使用该行作为签名。

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

    def myfunc(val=foobar):
    '''myfunc(val=foobar)

    Blah blah blah'''
    pass

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

在问题中,您在文档字符串中具有第一行:

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

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



 类似资料:
  • 问题内容: 我正在使用Sphinx的autodoc插件来自动记录一组模块。我有一个函数accepts ,我想重写文档以显示Python stdlib文档使用的稍微更好的样式。 是否可以覆盖特定功能的自动文档输出? 问题答案: 可以使用以下方法覆盖签名: 但是,具有覆盖签名的函数不会与通过引入的其他函数进行排序。对每个函数使用显式指令可以解决此问题: 加成 您还可以附加到文档字符串: 要覆盖签名和文

  • 问题内容: 我正在使用 Sphinx 功能根据我的Python库的文档字符串生成文档。 交叉引用的语法可在此处找到 该部分之前必须带有标签,以允许从文档的其他区域引用该部分。 我所拥有的是我其中一个班级的.rst(ReStructeredText)文件。它用 生成该类的文档。 我的问题是,如何从文档中的另一个.rst文档引用该类的自动生成的方法?如果我尝试在方法的文档字符串中放置标签,Sphinx

  • 问题内容: 是否有可能覆盖 全局 功能,从而在一定程度上影响 全局 功能? 据我所知,该函数在包装NodeJS脚本的函数中作为参数提供: 有什么方法可以修改功能吗? 这可能只会影响脚本所在的脚本。 我们如何在流程级别进行修改? 问题答案:

  • 问题内容: 我正在尝试使用Sphinx在Python中记录5,000多个项目。它有大约7个基本模块。据我所知,为了使用自动文档,我需要为项目中的每个文件编写如下代码: 这太繁琐了,因为我有很多文件。如果我只想指定要记录的“ mods”包,那会容易得多。然后,Sphinx可以递归地浏览包并为每个子模块创建一个页面。 有这样的功能吗?如果没有,我可以编写一个脚本来制作所有.rst文件,但这将花费很多时

  • 问题内容: 我在包含文件的文件上运行Sphinx,但似乎没有任何效果。 详细信息如下:我有一个Python项目,其中包含一个包含类的文件。我还有一个子目录,其中有一个文件(由生成): 我使用项目目录作为当前工作目录运行sphinx 。 为了确保找到Python文件,我在中包括了以下内容: 它运行没有错误,但是当我打开生成的HTML文件时,它仅显示“代理模块”,并且所有内容均为空白。为什么不显示班级

  • 问题内容: 有什么方法可以防止子类覆盖基类中的方法? 我的猜测是没有,但是我来自.NET界,并且我正试图使我的API尽可能健壮,因此,任何输入都将不胜感激。 可以强制执行吗?我知道编译器无济于事,所以也许通过一些运行时检查来解决?还是这不是一种处理事情的Python方法? 问题答案: 您是对的:您的尝试与Python的结构及其文化背道而驰。 记录您的API,并教育您的用户如何使用它。这是他们的程序