Właściwości modułu dokumentu Sphinx

Mam moduł, który powinien mieć@property, Rozwiązałem to, ustawiając klasę jako moduł. Mam pomysł z tej odpowiedzi:Leniwe zmienne modułowe - czy można to zrobić?

Chciałem, aby było to powtarzalne i łatwe w użyciu, więc stworzyłem dla niego metaklasę. To działa jak urok.

Problem polega na tym, że podczas używania Sphinx do generowania dokumentacji, dokumentacja nie jest dokumentowana. Wszystko inne jest udokumentowane zgodnie z oczekiwaniami. Nie mam pojęcia, jak to naprawić, może to problem z Sfinksem?

Moduł:

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

I wklej kopię, aby wygenerować / wyświetlić dokumentację Sphinx:

sphinx-apidoc . -o doc --full
sphinx-build doc html
xdg-open html/module.html

Najważniejszą częścią jest udokumentowanie właściwości klasy. Dodatkowe punkty do dokumentowania oryginalnych członków modułu.

EDYTOWAĆ: Klasa powinna być udokumentowana jako moduł, w którym się znajduje. Klasa jest używana w ten sposób i dlatego powinna pojawić się w ten sposób w Sphinx.

Przykład pożądanego wyjścia:

Module Foo
    TestClass docstring.

    some_property
        Property docstring.

    meth()
        meth doc

EDYCJA 2: Znalazłem coś, co może pomóc w znalezieniu rozwiązania. Kiedy masz regularny modułfoo o następującej treści:

#: Property of foo
prop = 'test'

Dokumenty Sfinksa to jak:

foo.prop = 'test'
    Property of foo

To samo działa, jeśliprop jest atrybutem klasy. Nie wiem, dlaczego nie działa w moim specjalnym przypadku.

questionAnswers(2)

yourAnswerToTheQuestion