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

问题描述 投票:1回答:1

如何在我的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
python python-sphinx private-members autodoc double-underscore
1个回答
0
投票

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

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

您的模块.rst

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

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

导致同时具有“被缠结的” _YourClass__two_cls和“未被缠结” __two_cls,但是只有“被缠结的”成员具有该值。

enter image description here

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

您的模块.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_

结果:

enter image description here

这里有两个值得注意的方面可以验证,提示存在错误。

  1. 通过显式包括“ mangled” _YourClass__two_cls,HTML与第一个版本不同,现在它被[w0]包裹在blockquote中,因此缩进显示也有所不同。

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

警告:autodoc:无法从模块'your_module'中导入属性'YourClass .__ two_cls';引发了以下异常:追溯(最近一次通话):文件“ =========== \ lib \ site-packages \ sphinx \ util \ inspect.py”,第307行,位于safe_getattr中返回getattr(obj,name,* defargs)AttributeError:类型对象'YourClass'没有属性'__two_cls'

因为Sphinx导入了Python对象,所以在文档生成步骤开始之前,成员__two_cls'已被“破坏”。 Sphinx实际上是正确的,记录“未损坏”的成员会导致文档读者产生错误的期望。

© www.soinside.com 2019 - 2024. All rights reserved.