7

sphinxのドキュメントによると、.. autoattributeディレクティブはインスタンス属性をドキュメント化できる必要があります。しかし、私がそうするなら::

.. currentmodule:: xml.etree.ElementTree

.. autoclass:: ElementTree

   .. autoattribute:: ElementTree._root

次に、ビルド時に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

インスタンス化ElementTreeして属性にアクセスしようとしても、_root正常に機能します::

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

私は何が間違っているのですか?

(私は実際に自分のクラスの1つでこの問題を抱えていますが、標準ライブラリにあるため、例としてElementTreeクラスを使用しています)

4

1 に答える 1

2

これは、パブリックでないインスタンス属性の処理方法にバグがあるようです。Sphinx はで定義されたインスタンス属性__init__を認識できるはずです。

これをどのように修正する必要があるかは言えません。関連すると思われる未解決のバグ レポートがあります

ElementTreeElementTree.pyのクラス定義に以下の行を追加すると、

__slots__  = ["_root"]

その後、AttributeErrorあなたが得るものは消えます。

于 2012-07-05T15:43:10.353 に答える