Члены объекта включаются директивой autodoc в зависимости от того, если:
- используется опция
:members:
(для участников со строками документации).
- используется опция
:undoc-members:
(для участников без строк документации).
Например:
dc module
=========
.. autoclass:: dc.Foo
В приведенном выше файле .rst
в директиве autodoc не заданы явные параметры, Sphinx будет неявно применять флаги параметров, взятые из autodoc_default_flags
в conf.py
.
Установка следующего в conf.py
приведет к тому, что все элементы объекта (со строками документации или без них) будут включены Sphinx во все директивы, которые явно не указывают параметры.
# autodoc settings
autodoc_default_options = {
'members': True,
'undoc-members': True,
}
Результат:
![введите здесь описание изображения](https://i.stack.imgur.com/WjLUU.jpg)
Однако возникает вопрос: что делают расширения autodoc и sphinx-napoleon, если члены явно указаны в Attributes
раздел строки документации но также включен в расширение autodoc?
Строки документации
Napoleon интерпретирует каждую строку документации, которую может найти autodoc (... ) Внутри каждой строки документации специально отформатированные разделы анализируются и преобразуются в reStructuredText.
Например, используя следующую строку документации вместе с параметрами, указанными выше в autodoc_default_options
.
import dataclasses
@dataclasses.dataclass
class Foo:
"""Docstring for Foo
Attributes:
var_a (str): An integer.
var_b (int): A string.
"""
var_a: str
var_b: int
В этом случае элементы будут объявлены дважды, по одному разу для каждого расширения, при этом соответствующее объявление reST будет сгенерировано как дубликат. Дублирование объявления reST приведет к обычному предупреждению:
C:\dc.py:docstring для dc.Foo.var_a:1: ПРЕДУПРЕЖДЕНИЕ: дублируется описание объекта dc.Foo.var_a, другой экземпляр в dc, используйте :noindex: для одного из них
C:\dc.py:docstring of dc.Foo.var_b:1: ПРЕДУПРЕЖДЕНИЕ: дублируется описание объекта dc.Foo.var_b, другого экземпляра в dc, используйте :noindex: для одного из них
Здесь можно отметить одно отличие: sphinx-napoleon объявит член в своих собственных раздел docstring, в то время как autodoc будет отображать его как другие элементы. Визуальная разница будет зависеть от темы, например, при использовании темы classic
:
![введите здесь описание изображения](https://i.stack.imgur.com/lgIRJ.jpg)
Наконец, если вы хотите задокументировать участников, использующих sphinx-napoleon, разделы docstring и избегайте дублирования объявления reST из autodoc, сохраняя при этом autodoc_default_options
, как показано, вы можете явно использовать параметр :exclude-members:
в этой конкретной директиве, например:
dc module
=========
.. autoclass:: dc.Foo
:exclude-members: var_a, var_b
Будет документировать членов, используя только директивы reST, сгенерированные sphinx-napoleon:
![введите здесь описание изображения](https://i.stack.imgur.com/FQMUm.jpg)
person
bad_coder
schedule
30.10.2020
None
? Опустить его вместе со знаком равенства? - person bad_coder   schedule 29.10.2020None
для меня просто странно. У них нет значения None, иначе они были бы неопределенными. Но, строго говоря, это другой вопрос. - person Arne   schedule 29.10.2020:undoc-members:
, и это решает мою проблему. Честно говоря, я так и не удосужился выяснить, что означают директивы в autodoc-generated first. Возможно, значение по умолчанию дляautodoc_default_options
вundoc-members
раньше былоfalse
, а теперьtrue
, но мне лень искать эту информацию. Не стесняйтесь публиковатьconf.py
, который меняет его обратно наfalse
в качестве ответа, который я могу принять =) - person Arne   schedule 29.10.2020