如何使用 :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 个值得注意的方面,提示存在错误。
通过显式包含 "mangled" _YourClass__two_cls
,HTML 与第一个版本不同,现在它在 [=16] 中得到 "wrapped" =] 并且因此缩进也显示不同。
如果您尝试明确 .. 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" 成员会使文档读者产生错误的期望。
如何将常量的值添加到我的 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 个值得注意的方面,提示存在错误。
通过显式包含 "mangled"
_YourClass__two_cls
,HTML 与第一个版本不同,现在它在 [=16] 中得到 "wrapped" =] 并且因此缩进也显示不同。如果您尝试明确
.. 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" 成员会使文档读者产生错误的期望。