2017-03-03 5 views
0

我々は性質を持っている、ネストされた辞書を超えるという仕事:プロパティ

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

zセッターは最終的にのようになります:チェックからオフに取り除くためにプロパティyを作成する方法

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 

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

私は本当に理解していません。おそらく、 'collections'モジュールから' defaultdict'を探していますか? – Alfe

+0

@Alfeは、私が思うに、私はちょうどdictの代わりに、他のプロパティを持つクラスが必要です。 –

+0

なぜ '_y'を入れるためにsetterが呼び出されるまで待つのですか? '_x = {'_y':{}}'を初期化するだけで完了します。 – chepner

答えて

2

setdefault

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

_yself._xに存在する場合、それは新しい辞書を作成し、それ以外は、それを取得します。

+0

ありがとう、このようにチェックします。 –