2017-03-03 41 views
0

我們擁有的特性,在嵌套的字典的工作:屬性在嵌套的字典

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 

如何建立財產y從檢查驅除掉:

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

z制定者最終必須是這樣的:

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

我不太明白。也許你正在尋找模塊'collections'中的'defaultdict'? – Alfe

+0

@Alfe,最後我想,我只需要與其他屬性類,而不是字典。 –

+0

爲什麼要等到setter被調用來放入'_y'?只需初始化'_x = {'_y':{}}'並完成它。 – chepner

回答

2

使用setdefault

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

如果存在self._x_y,它檢索它,否則它會創建一個新的字典。

+0

謝謝,會檢查這種方式。 –