Ich versuche, die Daten aus einem einfachen Objektdiagramm in ein Wörterbuch zu konvertieren. Ich brauche keine Typinformationen oder Methoden und muss sie nicht wieder in ein Objekt konvertieren können.Recursively Python Objektgraph konvertieren Zum Wörterbuch
fand ich this question about creating a dictionary from an object's fields, aber es ist es nicht rekursiv tun.
Da ich relativ neu zu Python bin, mache ich mir Sorgen, dass meine Lösung hässlich oder unpythonisch oder in irgendeiner obskuren Weise oder einfach nur NIH gebrochen sein könnte.
Mein erster Versuch schien zu funktionieren, bis ich es mit Listen und Wörterbüchern versuchte, und es schien leichter zu überprüfen, ob das übergebene Objekt ein internes Wörterbuch hatte, und wenn nicht, einfach als Wert zu behandeln (anstatt zu tun) all das überprüft zB). Meine bisherigen Versuche haben Rekursion auch nicht in Listen von Objekten:
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
Diese besser zu funktionieren scheint und erfordert keine Ausnahmen, aber wieder ich bin noch nicht sicher, ob es hier Fälle, die ich bin mir nicht bewusst von wo es fällt.
Alle Vorschläge würden sehr geschätzt werden.
in Python ist es nicht so schlimm Ausnahmen zu verwenden, und manchmal kann es die Codierung, eine pythonic Weg- EAFP (Einfachere Vergebung zu bitten als Permission) vereinfacht –
Sonderfall könnte sein, wenn Objekt __slots__, bearbeitete Antwort –
Punkt genommen, aber die Ausnahme Sache ist ein bisschen ein heiliger Krieg und ich tendiere dazu, sie zu bevorzugen, nie geworfen zu werden, es sei denn, etwas ist wirklich außergewöhnlich, eher als erwartete Programmfluss. jeder zu ihrem eigenen auf diesem einen :) – Shabbyrobe