Выведите значение переменной в документе 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 ответа:
С помощью функции 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 (люди используют константы, просто не изменяя определенные значения, но нет никакой языковой функции/ключевого слова, чтобы сказать интерпретатору, что определенное значение не разрешено изменять). Поэтому мое обоснованное предположение состоит в том, что то, что вы предлагаете, невозможно из-за отсутствия констант у питона.Тем не менее, можно было бы придумать хак, который считывает все значения переменных уровня модуля сразу после импорта. Внесение этих значений в документацию это может быть бессмысленно, так как нет никакой гарантии, что эти значения верны в течение всего времени выполнения программы.