Выведите значение переменной в документе sphinx


Представив, что у меня есть модуль с именем module.py и внутри него есть частная переменная с именем _VAR, я хочу напечатать ее значение в моей документации sphinx.

module.py

_VAR = 20
А в "Сфинксе" я хочу что-то вроде этого:
index.rst

The value of ``module._VAR`` is :py:print:`module._VAR`

И выход будет:

The value of module._VAR is 20
2 3

2 ответа:

С помощью функции autodoc можно делать все, что угодно. Вам просто нужно убедиться, что значение явно задокументировано в коде следующим образом:

_VAR = 20 #: Notice the colon, this tells sphinx to use this comment as docstring for this value

Затем вы можете получить это значение в своей документации, либо выполнив automodule с include-private, либо явно выполнив autodata только для этого имени переменной.

Обратите внимание, что вы можете использовать ту же тактику (#:) для явного документирования атрибутов классов, и они будут отображаться в документации для autoclass (или automodule, так как это неявно будет doc класс), включая любые литеральные значения, к которым они инициализируются.

Если бы Python имел константы (уровня модуля), такая константа действительно могла бы быть извлечена Sphinx, просто импортировав модуль. Это то, чего ты хочешь?

Я считаю, что это не достижимо во всей общности. То, что вы показываете,-это имя уровня модуля, которое было бы явно объявлено как константа в других языках программирования (например, с помощью ключевого слова const). Значение константы не может изменяться в течение всего времени выполнения программы. Тем не менее, нет никакого понятия константы в Python (люди используют константы, просто не изменяя определенные значения, но нет никакой языковой функции/ключевого слова, чтобы сказать интерпретатору, что определенное значение не разрешено изменять). Поэтому мое обоснованное предположение состоит в том, что то, что вы предлагаете, невозможно из-за отсутствия констант у питона.

Тем не менее, можно было бы придумать хак, который считывает все значения переменных уровня модуля сразу после импорта. Внесение этих значений в документацию это может быть бессмысленно, так как нет никакой гарантии, что эти значения верны в течение всего времени выполнения программы.