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?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top