2012-02-05 28 views
10

当我使用Sphinx autodoc来记录一个类时,属性的值总是被报告(因为它说它应该在#437下应该是here)但始终为“= None”属性的狮身人面像值报告为无

Attribute = None 
    Some Documentation 

我包括它像

.. autoclass:: core.SomeClass 
    :members: 

而且我的代码看起来像

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

有没有办法让“=无”报告真正的价值,还是让它消失?

+0

你在哪里看到''= None''进行了讨论? – jterrace 2012-02-13 02:52:34

+1

这里,例如:http://readthedocs.org/docs/domination-game/en/latest/games.html#domination.core.GameStats。它发生在我使用'self.attribute = ...'和'autoclass :: ..:members'组合的任何地方:' – noio 2012-02-14 09:46:23

回答

4

我很确定这与你的属性是一个实例属性的事实有关。在类实例化之前它不会获得值。狮身人面像导入模块为了检查它们,但它没有实例化任何类。

因此,“真实价值”不被狮身人面像知道,并输出None。我认为你不能轻易离开(但如果你准备修补狮身人面像源代码,我想任何事情都是可能的)。如果你不喜欢这样,你可以改为在类的文档字符串中记录属性。

使用相同标记方案(described here)记录的类属性确实将其值显示在呈现的输出中。但是没有明确的指示使得读者容易区分类和实例属性。也许狮身人面像在这里可能会更有帮助。

+0

我不认为这个答案的工作假设是正确的。我遇到了在__init __()函数之外定义和初始化的类属性的问题(即 - “ = None”出现在生成的文档中)。这些被记录在案,使用在同一行上的属性后面的“#:...”注释变体。 – dbanas 2017-12-20 18:14:42

+0

有趣。你有GitHub项目或类似的地方可以看看吗? – mzjn 2017-12-20 18:38:18

+0

是的:https://github.com/capn-freako/PyBERT/blob/8c63d28220edc000e9503082e05c6257cd9cee7c/pybert/pybert.py#L315 – dbanas 2017-12-20 18:45:31

8

即将到来的1.2版狮身人面像(以及第二个测试版)中将会有:annotation:选项(请参阅pull-request)。

对于autodata/autoattribute然后,您可以强制一个特定的值或抑制它。 因此,为了打印的属性没有价值,你会放:

.. autoclass:: core.SomeClass 

    .. autoattribute:: attribute 
     :annotation: 

目前,它仅与autodata/autoattribute而不是直接用递归automodule/autoclass工作。

+0

这似乎只适用于类属性。使用Sphinx 1.5.1进行测试 – 2017-01-05 15:50:26

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 =') 
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 } 
+1

有一个名为'autoinstanceattribute'的未公开的指令,您可以尝试。目前还不清楚这个指令是否需要记录,或者'autoattribute'是否也应该处理实例属性。请参阅https://github.com/sphinx-doc/sphinx/issues/904#issuecomment-68577602。 – mzjn 2017-01-05 16:46:39

+0

另请参阅http://stackoverflow.com/a/17676063/407651。 – mzjn 2017-01-05 16:55:44

+0

因此,带有空白':annotation:'选项的'.. autoinstanceattribute'指令确实可以取消该值!看起来这个实现在1.5之前是一团糟。 – 2017-01-05 19:51:17

2

有关狮身人面像的当前版本,你可以把你的项目的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 issue #2044

+0

相关:http://stackoverflow.com/a/10870416/407651 – mzjn 2017-03-12 07:03:28