tengo clases de Python con atributos de los objetos que sólo se declara como parte de la ejecución del constructor, así:¿Cómo puedo hacer que los atributos del objeto de documento de Python/Sphinx solo se declaren en __init__?
class Foo(object):
def __init__(self, base):
self.basepath = base
temp = []
for run in os.listdir(self.basepath):
if self.foo(run):
temp.append(run)
self.availableruns = tuple(sorted(temp))
Si ahora el uso de cualquiera help(Foo)
o intento de documentar Foo
en Sphinx, los self.basepath
y self.availableruns
atributos son no mostrada. Ese es un problema para los usuarios de nuestra API.
He intentado buscar una forma estándar de asegurar que estos atributos "dinámicamente declarados" puedan ser encontrados (y preferiblemente docstring'd) por el analizador, pero hasta ahora no hay suerte. ¿Alguna sugerencia? Gracias.
Gracias. Sí, aprecio que los atributos no sean computables en general, simplemente no estaba seguro de si había una heurística para obtener algunos de los declarados de forma simple/estándar, por ejemplo, exploración de fuente en lugar de inspección de objeto de clase. O modificando el código para declarar estos atributos como propiedades para que Sphinx/help los "encuentre". Pero, de todos modos, ese puntero a la sintaxis de Sphinx para declarar su existencia para fines de doc va a estar bien: ¡salud! – andybuckley
"¿O modificando el código para declarar estos atributos como propiedades"? "declarar" no es un concepto de Python. El uso de las funciones del método de propiedades para sus atributos funcionará si va a hacer que los miembros se documenten automáticamente. Parece más ** trabajo ** que simplemente documentarlos en la carpeta de documentos. –
Pero significaría que se documentan en igualdad de condiciones con otros métodos, lo que creo que mejora significativamente la calidad de la documentación.Estoy dispuesto a poner un poco más de trabajo para eso, si no tiene éxito en el rendimiento o hace que el código sea impenetrable. Ese fue el punto de la pregunta inicial: estoy seguro de que puedo encontrar una manera de hacerlo, pero me preguntaba si existe un enfoque estándar (de facto) que minimice los inconvenientes. – andybuckley