Свойства модуля документа Sphinx
У меня есть модуль, который должен иметь@property
Я решил это, установив класс в качестве модуля. Я получил идею из этого ответа:Ленивые переменные модуля - это можно сделать?
Я хотел, чтобы это было повторяемым и простым в использовании, поэтому я сделал для него метакласс. Это работает как шарм.
Проблема в том, что при использовании Sphinx для генерации свойств документацииполучить документально. Все остальное задокументировано, как и ожидалось. Я понятия не имею, как это исправить, может быть, это проблема со Сфинксом?
Модуль:
import sys
import types
class ClassAsModule(type):
def __new__(cls, name, bases, attrs):
# Make sure the name of the class is the module name.
name = attrs.pop('__module__')
# Create a class.
cls = type.__new__(cls, name, bases, attrs)
# Instantiate the class and register it.
sys.modules[name] = cls = cls(name)
# Update the dict so dir works properly
cls.__dict__.update(attrs)
class TestClass(types.ModuleType):
"""TestClass docstring."""
__metaclass__ = ClassAsModule
@property
def some_property(self):
"""Property docstring."""
pass
def meth():
"""meth doc"""
pass
И копирование-вставка для генерации / просмотра документации Sphinx:
sphinx-apidoc . -o doc --full
sphinx-build doc html
xdg-open html/module.html
Наиболее важной частью является документирование класса свойства. Бонусные баллы также позволяют документировать оригинальных членов модуля.
РЕДАКТИРОВАТЬ: Класс должен быть задокументирован как модуль, в котором он находится. Класс используется таким образом и, таким образом, должен отображаться в Sphinx таким образом.
Пример желаемого результата:
Module Foo
TestClass docstring.
some_property
Property docstring.
meth()
meth doc
РЕДАКТИРОВАТЬ 2: Я нашел то, что может помочь в поиске решения. При наличии обычного модуляfoo
со следующим содержанием:
#: Property of foo
prop = 'test'
Сфинкс документирует это так:
foo.prop = 'test'
Property of foo
То же самое работает, еслиprop
является атрибутом класса. У меня нетне понял, почему это не такне работает в моем особом случае.