【问题标题】:Problems with autodoc and explicitly specified instance attributes自动文档和明确指定的实例属性的问题
【发布时间】:2020-01-25 08:08:03
【问题描述】:

我编写了一个 python 类,并用 sphinx 制作了文档。例如,这个类看起来像:

class Aclass(object):
    """ my class """

    def __init__(self):
        """ constructor """

        self.a = None
        """ doc for attribute a """

        self._prop = None

    def _get_prop(self):
        """ getter prop """
        return self._prop

    def _set_prop(self, val):
        """ setter prop """
        self._prop = val

    prop = property(_get_prop, _set_prop)
    """ a property """

    def square(self):
        """ return square of a """
        return self.a**2

现在,为了做文档,在我写的第一个文件中:

.. autoclass:: aclass.Aclass
   :members:

一切正常,apropsquare 出现在文档中。

但是如果我尝试分别记录属性和方法,sphinx 说它找不到属性 a,但它适用于 prop。

.. autoattribute:: aclass.Aclass.prop

.. autoattribute:: aclass.Aclass.a

错误信息是:

Traceback (most recent call last):                                                                                
  File "/usr/lib/python2.7/dist-packages/sphinx/ext/autodoc.py", line 326, in import_object
    obj = self.get_attr(obj, part)
  File "/usr/lib/python2.7/dist-packages/sphinx/ext/autodoc.py", line 232, in get_attr
    return safe_getattr(obj, name, *defargs)
  File "/usr/lib/python2.7/dist-packages/sphinx/util/inspect.py", line 70, in safe_getattr
    raise AttributeError(name)
AttributeError: a

/home/gvallver/dev/sphinx/doc/source/index.rst:17: WARNING: autodoc can't import/find attribute 'aclass.Aclass.a', it reported error: "a", please check your spelling and sys.path

我在某处读到 Sphinx values for attributes reported as None 说 sphinx 不会对类进行实例化,因此类属性(作为道具)和实例属性(作为 a)之间存在差异。但是如何在文档中引用实例属性?

实际上,如果在第一个文件中没有明确询问实例属性,则可以找到它们。例如,这将起作用:

.. autoclass:: aclass.Aclass
    :members:

但这不是

.. autoclass: aclass.Aclass
    :members: a

【问题讨论】:

标签: python python-sphinx autodoc


【解决方案1】:

有一个关于此的错误报告(创建于 2012 年 3 月 30 日;仍在 2015 年 12 月 12 日开放):https://github.com/sphinx-doc/sphinx/issues/904

  1. 包含实例属性的显式 :members: 列表的问题已在 this commit 中修复(包含在 Sphinx 1.2b1 中)。

  2. 正如评论中提到的(来自 Jon Waltman),有一个未记录的 autoinstanceattribute 指令。

    使用 .. autoinstanceattribute:: aclass.Aclass.a 确实有效(使用 Sphinx 1.1.3 和 1.2b1 测试)。

【讨论】:

  • 看起来autoinstanceattribute 不再有效:我有WARNING: Unknown directive type "autoinstanceattribute".
  • @GordonBai:错误报告已于 2020 年 7 月 16 日关闭。autoattribute 是否有效?
  • Thers 是一个 issue comment 提及 autoattribute 指令会为实例属性引发 AttributeError。然后评论者用PR 解决了这个问题。但是,在我的测试中,它仍然会引发AttributeError。我正在使用 Sphinx 4.0.2
  • @GordonBai: autoinstanceattribute 不再有效,但 autoattribute 应该在 Sphinx 4.1.0 中有效。见github.com/sphinx-doc/sphinx/issues/9283
  • @mjzn 谢谢!是的,我知道这个问题,因为它是由我打开的 :)
猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2010-10-29
  • 1970-01-01
相关资源
最近更新 更多