14

当我使用 Sphinx autodoc 来记录一个类时,属性的值总是被报告,(正如它所说的应该在这里,在 #437 下)但总是作为“= None”

Attribute = None
    Some Documentation

我把它包括在内

.. autoclass:: core.SomeClass
   :members:

我的代码看起来像

class SomeClass(object):
    def __init__(self):
        self.attribute = "value" #: Some Documentation

有没有办法让“= None”报告真正的价值,或者让它消失?

4

5 回答 5

10

在即将发布的 sphinx 1.2 版(以及第二个 beta 版)中将有一个:annotation:选项(请参阅pull-request)。

对于autodata/autoattribute你可以强制一个特定的值或抑制它。因此,为了不打印您将放置的属性的值:

.. autoclass:: core.SomeClass

   .. autoattribute:: attribute
      :annotation:

目前它只适用于autodata/autoattribute直接而不是递归地automodule/ autoclass

于 2013-01-24T13:56:13.640 回答
6

我很确定这与您的属性是实例属性这一事实有关。在类被实例化之前,它不会获得值。Sphinx 导入模块以检查它们,但它不实例化任何类。

因此,Sphinx 不知道“真实值”,None而是输出。我认为你不能轻易让它消失(但我想如果你准备修补 Sphinx 源代码,一切皆有可能......)。如果你不喜欢这样,你可以在类的文档字符串中记录属性。

使用相同标记方案记录的类属性(在此处描述确实会在呈现的输出中显示它们的值。但是没有明确的指示可以让读者轻松区分类和实例属性。也许斯芬克斯在这里可能会更有帮助。

于 2012-02-16T20:09:52.560 回答
2

对于当前版本的 Sphinx,您可以在conf.py项目中放置一个猴子补丁来修复此问题:

from sphinx.ext.autodoc import (
    ClassLevelDocumenter, InstanceAttributeDocumenter)

def iad_add_directive_header(self, sig):
    ClassLevelDocumenter.add_directive_header(self, sig)

InstanceAttributeDocumenter.add_directive_header = iad_add_directive_header

这在Sphinx 问题 #2044中进行了讨论

于 2017-03-11T18:19:24.450 回答
0

这似乎仍然是一个问题。我解决了这个问题:

class ValueDoc:

    def __init__(self, text):
        self.text = text

    def __repr__(self):
        return self.text

然后在类级别定义属性,例如:

#: documentation for foo
foo = ValueDoc('text to show up after =')
于 2016-09-01T16:16:52.963 回答
0

我无法获得适用于实例属性的注释。我选择在我的主题中隐藏属性值。

示例 html

<dl class="attribute">
  <dt>
    <code class="descName">Attribute</code>
    <em class="property"> = None</em>
  </dt>
</dl>

要隐藏的主题 CSS= None

dd dl.attribute em.property { display: none }
于 2017-01-05T15:59:56.777 回答