Zugriff auf Plist Elemente in einem dict
-
07-07-2019 - |
Frage
Ich habe eine Klasse in einem Modul I, die eine plist (XML) Datei liest und gibt einen dict. Dies ist sehr praktisch, weil ich so etwas sagen kann:
Data.ServerNow.Property().DefaultChart
Das gibt eine Eigenschaft Wörterbuch, speziell den Wert für DefaultChart
. Sehr elegant.
Um jedoch ein Wörterbuch auf diese Weise die Montage fehlschlägt:
dict={'Data': 'text1', 'Name':'text2', 'Place':'text3]}
dict
sieht genauso aus wie die Plist dict.
Aber wenn ich sage,
print TextNow.Data().Name
Ich bekomme Fehler
'dict' object has no attribute 'Name'
Wenn ich aber sage
print TextNow.Data()['Name']
plötzlich funktioniert es!
Kann jemand dieses Verhalten erklären? Gibt es eine Möglichkeit, eine dict in einem XML-ish dict zu konvertieren?
Lösung
Sie können getattr Neudefinition verwenden, um Dictionary-Schlüssel als Attribute zu behandeln, z.
class xmldict(dict):
def __getattr__(self, attr):
try:
return object.__getattribute__(self, attr)
except AttributeError:
if attr in self:
return self[attr]
else:
raise
So zum Beispiel, wenn Sie folgende dict haben:
dict_ = {'a':'some text'}
Sie können tun so:
>> print xmldict(dict_).a
some text
>> print xmldict(dict_).NonExistent
Traceback (most recent call last):
...
AttributeError: 'xmldict' object has no attribute 'NonExistent'
Andere Tipps
Es funktioniert nicht, weil der Punkt-Operator nicht korrekte Zugriffs Syntax für Python Wörterbücher ist. Sie;. Re versuchen, es als Objekt zu behandeln und eine Eigenschaft zuzugreifen, anstatt ein Datenelement der Datenstruktur zugreifen