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.