如何使用 :private-members: 在 Sphinx 中显示损坏的成员值常量

How use :private-members: to show mangled member value constants in Sphinx

如何将常量的值添加到我的 Sphinx 文档中?

.. automodule:: mymodule
  :members:
  :private-members:

这是我的测试模块:

class Test:
  """My Test Class"""

  __MY_TEST_CONSTANT = 98.2
  """My test constant docu"""

目前我得到了我的私有常量的描述,但值是 "None" 而不是“98.2”。

class Test: 
  My Test Class


  __MY_TEST_CONSTANT = None
  My test constant docu

我对此进行了测试,我很确定它是:未记录的功能、错误,或两者兼而有之。例如,

your_module.py

class YourClass:
    """Your class."""

    _one_cls = 11.1  #: one class
    __two_cls = 22.2  #: two class
    __three_cls__ = 33.3  #: three class
    four_cls_ = 44.4  #: four class

your_module.rst

your_module
===========

.. automodule:: your_module
    :members:
    :undoc-members:
    :show-inheritance:
    :private-members: 

结果同时具有 "mangled" _YourClass__two_cls 和“未损坏”__two_cls,但是只有 "mangled" 成员具有值。

现在让我们尝试使用 sphinx 指令单独记录每个对象:

your_module.rst

your_module
===========

.. automodule:: your_module
    :exclude-members: YourClass

    .. autoclass:: YourClass
      :members: 
      :show-inheritance:
      :private-members: 
      :exclude-members: _one_cls, four_cls_, __two_cls, _YourClass__two_cls

        .. autoattribute:: _one_cls

        .. autoattribute:: _YourClass__two_cls

        ..
            including this would yield an error:
            .. autoattribute:: __two_cls
            > failed to import attribute 'YourClass.__two_cls' from module 'your_module'

        .. autoattribute:: four_cls_

结果:

此处可以验证 2 个值得注意的方面,提示存在错误。

  1. 通过显式包含 "mangled" _YourClass__two_cls,HTML 与第一个版本不同,现在它在 [=16] 中得到 "wrapped" =] 并且因此缩进也显示不同。

  2. 如果您尝试明确 .. autoattribute:: __two_cls Sphinx 发出以下警告:

WARNING: autodoc: failed to import attribute 'YourClass.__two_cls' from module 'your_module'; the following exception was raised: Traceback (most recent call last): File "===========\lib\site-packages\sphinx\util\inspect.py", line 307, in safe_getattr return getattr(obj, name, *defargs) AttributeError: type object 'YourClass' has no attribute '__two_cls'

因为 Sphinx 导入 Python 对象,所以在文档生成步骤开始之前,成员 __two_cls' 已经是 "mangled"。 Sphinx 在这方面实际上是正确的,记录 "not mangled" 成员会使文档读者产生错误的期望。