Sto scrivendo un codice di serializzazione/deserializzazione in Python che leggerà/scriverà una gerarchia di ereditarietà da alcuni JSON. La composizione esatta non sarà nota fino a quando la richiesta non sarà inviata.Camminare ricorsivamente su un albero di ereditarietà Python in fase di esecuzione
Quindi, considero l'elegante soluzione di introspezione ricorsiva della gerarchia di classi Python da emettere e quindi, durante il percorso attraverso la struttura ad albero, installare la corretta valori in un tipo base Python.
E.g.,
A
|
|\
| \
B C
Se chiamo mia routine "introspezione", a B, deve restituire un dict che contiene una mappatura da tutte le variabili di A ai loro valori, così come le variabili di B ed i loro valori.
Allo stato attuale, posso guardare attraverso B.__slots__
o B.__dict__
, ma posso solo estrarre i nomi delle variabili di B da lì.
Come ottengo il __slots__
/__dict__
di A, dato solo B? (o C).
so che Python non supporta direttamente la fusione come il C++ & suoi discendenti DO-
Hmm, che suggerisce che avrei bisogno di upcast da uno dei membri della lista restituita. Non sono sicuro di come farlo in Python. –
ah, immagino di non aver capito esattamente cosa stavi cercando. Ho cercato di chiarire come ho interpretato la tua domanda con una modifica. –
'[local_variables_of (i()) per i in type (o) .mro() [: - 1]]' è stata la soluzione che mi è venuta in mente. 'local_variables_of' controlla __slots__ e __dict__ e restituisce una lista di nomi attr. –