Ich schreibe etwas Serialisierungs-/Deserialisierungscode in Python, der eine Vererbungshierarchie aus JSON lesen/schreiben wird. Die genaue Zusammensetzung wird nicht bekannt sein, bis die Anfrage gesendet wird.Gehen Sie rekursiv eine Python-Vererbungsstruktur zur Laufzeit durch
So halte ich die elegante Lösung für rekursiv inspizieren die Python-Klassenhierarchie zu emittieren und dann, auf dem Weg zurück durch den Baum, installieren Sie die richtige Werte in einem Python-Basistyp.
E.g.,
A
|
|\
| \
B C
Wenn ich meine „introspect“ Routine auf B nennen, sollte es eine dict zurück, die eine Zuordnung von allen A der Variablen auf ihre Werte, sowie B-Variablen und ihre Werte enthält.
So wie es jetzt aussieht, kann ich durch B.__slots__
oder B.__dict__
schauen, aber ich kann nur Bs Variablennamen von dort herausziehen. Wie bekomme ich die __slots__
/__dict__
von A, nur B gegeben? (oder C).
Ich weiß, dass Python nicht direkt unterstützt wie C++ Casting & seine Nachkommen do-
Hmm, das schlägt vor, ich müsste von einem der Mitglieder der zurückgegebenen Liste upcast. Ich bin nicht sicher, wie man das in Python macht. –
ah, ich glaube, ich habe nicht genau verstanden, wonach du gesucht hast. Ich habe versucht zu klären, wie ich deine Frage mit einem Schnitt interpretiert habe. –
'[local_variables_of (i()) für i in type (o) .mro() [: - 1]]' war die Lösung, die ich mir ausgedacht hatte. 'local_variables_of' prüft __slots__ und __dict__ und gibt eine Liste von Attr-Namen zurück. –