Propiedades del módulo de documento Sphinx

Tengo un módulo que debería tener un@property, Resolví esto configurando una clase como el módulo. Tengo la idea de esta respuesta:Variables del módulo perezoso - ¿Se puede hacer?

Quería que esto fuera repetible y fácil de usar, así que hice una metaclase para ello. Esto funciona como un encanto.

El problema es que al usar Sphinx para generar propiedades de documentación no se documenta. Todo lo demás se documenta como se espera. No tengo idea de cómo solucionar este problema, ¿quizás sea un problema con Sphinx?

El módulo:

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

Y un copiar y pegar para generar / ver la documentación de Sphinx:

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

La parte más esencial es documentar las propiedades de la clase. Puntos de bonificación para documentar también los miembros originales del módulo.

EDITAR: La clase debe documentarse como el módulo en el que se encuentra. La clase se usa de esta manera y, por lo tanto, debe aparecer de esta manera en Sphinx.

Ejemplo de salida deseada:

Module Foo
    TestClass docstring.

    some_property
        Property docstring.

    meth()
        meth doc

EDIT 2: Encontré algo que puede ayudar a encontrar una solución. Al tener un módulo regularfoo Con el siguiente contenido:

#: Property of foo
prop = 'test'

Sphinx documenta esto como:

foo.prop = 'test'
    Property of foo

Lo mismo funciona siprop es un atributo de una clase. No he descubierto por qué no funciona en mi caso especial.

Respuestas a la pregunta(2)

Su respuesta a la pregunta