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

我究竟做错了什么?

(我实际上在我自己的一个类中遇到了这个问题,但我只是以 ElementTree 类为例,因为它在标准库中)

4

1 回答 1

2

这看起来像是处理非公共实例属性的方式中的一个错误。Sphinx__init__应该能够识别.

我不能说这应该如何解决。有一个似乎相关的开放错误报告:非公共实例属性没有记录没有 __slots__

ElementTree如果在 ElementTree.py中类的定义中加入以下行,

__slots__  = ["_root"]

然后AttributeError你得到的就消失了。

于 2012-07-05T15:43:10.353 回答