Sto provando a convertire i dati da un semplice oggetto grafico in un dizionario. Non ho bisogno di informazioni sui tipi o metodi e non ho bisogno di essere in grado di riconvertirlo nuovamente in un oggetto.Converte ricorsivamente il grafico dell'oggetto python nel dizionario
Ho trovato this question about creating a dictionary from an object's fields, ma non lo fa in modo ricorsivo.
Essendo relativamente nuovo per Python, sono preoccupato che la mia soluzione possa essere brutta, o unpitonica, o rotta in qualche modo oscuro, o semplicemente semplice vecchio NIH.
Il mio primo tentativo è sembrato funzionare fino a quando non l'ho provato con elenchi e dizionari, e mi è sembrato più semplice controllare se l'oggetto passato avesse un dizionario interno e, in caso contrario, trattarlo come un valore (piuttosto che farlo tutto questo è il controllo dell'istanza). I miei tentativi precedenti, inoltre, non hanno ricorsione in elenchi di oggetti:
def todict(obj):
if hasattr(obj, "__iter__"):
return [todict(v) for v in obj]
elif hasattr(obj, "__dict__"):
return dict([(key, todict(value))
for key, value in obj.__dict__.iteritems()
if not callable(value) and not key.startswith('_')])
else:
return obj
Questo sembra funzionare meglio e non richiede eccezioni, ma ancora una volta non sono ancora sicuro se ci sono casi in qui io non sono a conoscenza di dove cade.
Qualsiasi suggerimento sarebbe molto apprezzato.
in python non è poi così male a utilizzare le eccezioni e, talvolta, può semplificare la codifica, un modo-divinatorio EAFP (più facile chiedere perdono che il permesso) –
caso speciale potrebbe essere quando oggetto ha __slots__, modificato risposta –
punto preso, ma l'eccezione è un po 'di guerra santa e tendo a preferirli non essere mai lanciati a meno che qualcosa non sia veramente eccezionale, piuttosto che il flusso del programma previsto. ognuno per conto proprio su quello :) – Shabbyrobe