2012-06-26 9 views
5

Gemäß der sphinx documentation sollte die Direktive .. autoattribute in der Lage sein, Instanzattribute zu dokumentieren. Allerdings, wenn ich tue ::Autoklassen- und Instanzattribute

.. currentmodule:: xml.etree.ElementTree 

.. autoclass:: ElementTree 

    .. autoattribute:: ElementTree._root 

Dann beim Bau erhalte ich ein Attribut:

Traceback (most recent call last):etree.ElementTree.ElementTree     
    File "/Volumes/Raptor/Library/Python/2.7/lib/python/site-packages/sphinx/ext/autodoc.py", line 326, in import_object 
    obj = self.get_attr(obj, part) 
    File "/Volumes/Raptor/Library/Python/2.7/lib/python/site-packages/sphinx/ext/autodoc.py", line 232, in get_attr 
    return safe_getattr(obj, name, *defargs) 
    File "/Volumes/Raptor/Library/Python/2.7/lib/python/site-packages/sphinx/util/inspect.py", line 70, in safe_getattr 
    raise AttributeError(name) 
AttributeError: _root 

obwohl, wenn ich ElementTree instanziiert und versuche, Zugriff auf das _root Attribut, es funktioniert gut ::

>>> from xml.etree.ElementTree import ElementTree 
>>> e = ElementTree() 
>>> hasattr(e, '_root') 
True 

Was mache ich falsch?

(ich habe tatsächlich dieses Problem mit einem meinen eigenen Klassen, aber ich bin nur mit der ElementTree Klasse als Beispiel, da es in der Standardbibliothek ist)

Antwort

1

Dies wie ein Fehler in der Art und Weise sieht nicht Öffentliche Instanzattribute werden behandelt. Sphinx soll instance attributes defined in __init__ erkennen können.

Ich kann nicht sagen, wie das behoben werden sollte. Es gibt einen offenen Fehlerbericht, der anscheinend ähnlich ist: Non-public instance attributes are not documented without __slots__.

Wenn die folgende Zeile in der Definition der ElementTree Klasse in ElementTree.py hinzugefügt wird,

__slots__ = ["_root"] 

dann die AttributeError, die Sie erhalten weggeht.

+0

Bestätigt für mich auch. Irgendeine Idee, wenn das repariert wurde und wenn ja, welche Version? – Rafe

+1

@Rafe: Der Fehler ist immer noch nicht gelöst. – mzjn