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

使用Python Sphinx引用长名称

谷梁子昂
2023-03-14
问题内容

我正在为我的Python模块编写文档(使用Sphinx和reST),并且发现当交叉引用其他Python对象(模块,类,函数等)时,完整的对象名最终变得非常长。通常它的长度超过80个字符,我不惜一切代价避免。

这是一个例子:

def exampleFunction():
    '''Here is an example docstring referencing another
    :class:`module1.module2.module3.module4.module5.ReallyLongExampleClassName`

    '''

问题是,在为 ReallyLongExampleClassName
类创建文档时,我为完整路径名生成了它module1.module2.module3.module4.module5.ReallyLongExampleClassaName

我想知道是否有办法解决这个问题?我尝试了以下方法,但没有成功:

1)在模块名称的中间添加换行符。例:

:class:`module1.module2.module3.module4.
module5.ReallyLongExampleClassName`

2)以其他方式(但仍可导入Python)引用类名。例:

:class:`module1.module2.ReallyLongClassName`

我认为,由于的文档ReallyLongClassName与完整路径名绑定,因此Sphinx无法将缩短的版本与全名版本相关联。

编辑04/05/2012

根据j13r的答案/建议(请参见下文),我尝试了以下操作:

:class:`module1.module2.module3.module4.module5\
ReallyLongExampleClassName`

这成功地工作了。使此功能生效的唯一警告是,第二行之前不能有空格(在文档字符串中使用此字符串时,这非常令人沮丧)。因此,使我的原始示例生效,它看起来像:

def exampleFunction():
    '''Here is an example docstring referencing another
    :class:`module1.module2.module3.module4.module5.\
ReallyLongExampleClassName`

    '''

很好,很丑。如果您要在空格之前ReallyLongExampleClassName将其缩进到与其上方的行相同的高度,则输出将包括空格,因此Sphinx会尝试引用module1.module2.module3.module4.module5.ReallyLongExampleClassName

我还应该注意,我尝试了其他两种变体,但没有用:

    # Note: Trying to put a space before the '\'
    :class:`module1.module2.module3.module4.module5. \
ReallyLongExampleClassName`

    # Note: Trying to leave out the '\'
    :class:`module1.module2.module3.module4.module5.
ReallyLongExampleClassName`

我一直在寻找一种不涉及破坏docstring格式的解决方案,但是我想它可以做到……我想我实际上更喜欢一行超过80个字符的行。

感谢j13r的回答!


问题答案:

根据sphinx文档(https://www.sphinx-
doc.org/en/master/usage/restructuredtext/domains.html#cross-referencing-
python-objects

),可以在目标类之前使用点:

:class:`.ReallyLongExampleClassName`

要么

:class:`.module5.ReallyLongExampleClassName`

让狮身人面像搜索该类:

…如果名称前加点号,但未找到完全匹配的内容,则将目标作为后缀,并搜索带有该后缀的所有对象名称。例如,:py:meth:.TarFile.close引用tarfile.TarFile.close()函数,即使当前模块不是tarfile。由于这可能会变得模棱两可,因此,如果可能存在多个匹配项,您将收到Sphinx的警告。



 类似资料:
  • 问题内容: H2似乎在带引号的名称和不带引号的名称之间有所不同。有没有办法让他们以相同的方式对待他们? 这是我已经完成的测试: 这是查询: 我该怎么做才能使这些查询与H2一起使用? 问题答案: 根据SQL规范的要求,H2中的引号名称区分大小写。这意味着它将起作用: 但这不会: 在H2中,不带引号的名称不区分大小写。它们通常会转换为大写字母(例如在Oracle和其他数据库中)。这意味着声明 与…相同

  • 问题内容: 计划使用字符串值来引用我要更新的变量。组合来自几个不同用户选择来源的字符串。有很多使用if / case语句的可能性。提前致谢 问题答案: 如何使用字典? 这将使您实现所需的功能-存储不同键的值。 例如,代替使用 你可以用 要将值存储在字典中,只需使用 并从字典中获取值,请使用 所以,你可以使用这样的东西 顺便提一句,您可以真正清理一些代码

  • 问题内容: 我目前正在尝试诊断应用程序中的缓慢内存泄漏。到目前为止,我掌握的事实如下。 我有4天运行该应用程序的堆转储。 该堆转储包含约800个WeakReference对象,这些对象指向保留40mb内存的对象(所有对象都是同一类型,出于这个问题的目的,我将其称为Foo)。 Eclipse内存分析工具显示,这些WeakReferences引用的每个Foo对象均未被其他任何对象引用。我的期望是,这应

  • null 产生一些消息: 使用者无法使用消息,如果我给: 当给出服务器而不是时,能够使用消息的使用者:

  • 问题内容: 我面临着要与MySQL 5.0一起使用而编写的旧系统,现在需要将其迁移到MysQL 5.5(要求)。我发现一列名为,这在MySQL 5.5中似乎是系统单词。因此,我所有包含此列的Hibernate查询都给出语法错误: 由以下原因引起:java.sql.BatchUpdateException:您的SQL语法有错误。检查与您的MySQL服务器版本相对应的手册,以获取在’maxvalue附

  • 问题内容: 在阅读了一些有关SQL问题的答案和评论,并听到我的一个朋友在一个禁止他们使用的政策的地方工作之后,我想知道在MySQL的字段名周围使用反引号是否有问题。 那是: 问题答案: 使用反引号允许您使用其他字符。在查询编写中,这不是问题,但是如果假设您可以使用反引号,那么我认为它可以让您摆脱诸如 当然哪个会生成命名错误的表。 如果您只是为了简洁起见,我认为它没有问题,那么您会注意是否按如下方式