Escribo un código de serialización/deserialización en Python que leerá/escribirá una jerarquía de herencia de algunos JSON. La composición exacta no se conocerá hasta que se envíe la solicitud.Recorriendo recursivamente un árbol de herencia de Python en tiempo de ejecución
Por lo tanto, considero que la solución elegante para recursivamente introspectar la jerarquía de clases Python para emitir y luego, en el camino de regreso a través del árbol, instalar la correcta valores en un tipo básico de Python.
E.g.,
A
|
|\
| \
B C
Si llamo a mi rutina de "introspección" en la B, debe devolver un diccionario que contiene un mapeo de todas las variables de A a sus valores, así como las variables de B y sus valores.
Tal como está ahora, puedo mirar a través de B.__slots__
o B.__dict__
, pero solo puedo sacar los nombres de las variables de B de allí.
¿Cómo obtengo el __slots__
/__dict__
de A, dado solo B? (o C).
sé que Python no soporta directamente la fundición como C++ & sus descendientes DO-
Hmm, eso sugiere que tendría que actualizar desde uno de los miembros de la lista devuelta. No estoy seguro de cómo hacer eso en Python. –
ah, supongo que no entendí exactamente lo que estabas buscando. Intenté aclarar cómo interpreté tu pregunta con una edición. –
'[local_variables_of (i()) para i en tipo (o) .mro() [: - 1]]' fue la solución que se me ocurrió. 'local_variables_of' comprueba __slots__ y __dict__ y devuelve una lista de nombres attr. –