2012-06-26 10 views
5

Zgodnie z sphinx documentation, dyrektywa .. autoattribute powinna być w stanie udokumentować atrybuty instancji. Jednakże, jeśli robię ::Atrybuty autoclass i instancji

.. currentmodule:: xml.etree.ElementTree 

.. autoclass:: ElementTree 

    .. autoattribute:: ElementTree._root 

Następnie przy budowie dostaję AttributeError:

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 

chociaż gdybym instancję ElementTree i próbować uzyskać dostęp do atrybutu _root, współpracuje ::

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

Co robię źle?

(ja faktycznie posiadające ten problem z jednym z moich własnych klas, ale jestem po prostu za pomocą klasy ElementTree jako przykład, ponieważ znajduje się w bibliotece standardowej)

Odpowiedz

1

To wygląda na błąd w sposób nie- używane są publiczne atrybuty instancji. Sphinx ma być w stanie rozpoznać instance attributes defined in __init__.

Nie mogę powiedzieć, jak to naprawić. Istnieje otwarty raport o błędzie, który wydaje się być powiązany: Non-public instance attributes are not documented without __slots__.

Jeśli dodaje się następujący wiersz do definicji klasy w ElementTree.py ElementTree,

__slots__ = ["_root"] 

wtedy AttributeError że masz odchodzi.

+0

Potwierdzono także dla mnie. Czy jest jakiś pomysł, jeśli to naprawiono, a jeśli tak, to w jakiej wersji? – Rafe

+1

@Rafe: Błąd jest nadal nierozwiązany. – mzjn