2017-03-03 4 views
0

Wir Eigenschaften haben, dass die Arbeit über verschachtelte Wörterbücher:Eigenschaften über verschachtelte Wörterbuch

class A(object): 
    _x = {} 

    @property 
    def z(self): 
     return self._x.get('_y', {}).get('_z') 

    @z.setter 
    def z(self, value): 
     if not self._x.get('_y'): 
      self._x['_y'] = {} 
     self._x['_y']['_z'] = value 

Wie Eigenschaft erstellen y von Scheck befreien sich aus:

if not self._x.get('_y'): 
    self._x['_y'] = {} 

z Setter muss wie schließlich aussehen:

@z.setter 
def z(self, value): 
    self.x.y['_z'] = value 
+0

Ich verstehe es nicht wirklich. Vielleicht suchen Sie nach 'defaultdict's aus dem Modul' collections'? – Alfe

+0

@Alfe, schließlich denke ich, ich brauche nur Klasse mit anderen Eigenschaften, anstatt dict. –

+0

Warum warten, bis der Setter aufgerufen wird, '_y' zu setzen? Einfach '_x = {'_y': {}}' initialisieren und damit fertig sein. – chepner

Antwort

2

verwenden Sie setdefault:

@z.setter 
def z(self, value):   
    self._x.setdefault('_y',{})['_z'] = value 

wenn _y in self._x existiert, ruft er, sonst es ein neues Wörterbuch erstellt.

+0

Danke, wird auf diese Weise prüfen. –

Verwandte Themen