2012-04-05 12 views
2

Pythonでdict-likeオブジェクトを更新するために+ =表記を使用したいと思います。私はdict.updateメソッドと同じ動作をしたい。ここに私のクラスである(と辞書がアクセス ""):overload + = Pythonのマッピングタイプ

class sdict(dict): 
    def __getattr__(self, attr): 
     return self.get(attr, None) 
    __setattr__= dict.__setitem__ 
    __delattr__= dict.__delitem__ 

は、私が試した:

__iadd__ = dict.update 

そして、これらの作業の

def __iadd__(self, other): 
    self.update(other) 
    return self 

が、どれも。 (最初のものは元の辞書を破壊し、2番目のものはSyntaxErrorを生成します)

更新:
第2の定義は実際に動作します。 defを忘れてしまったので、私にとってはうまくいかなかった。 dict.updateがNoneを返すため、最初のものは動作しません。

答えて

12

私はあなたが欠けているすべてのデフだと思う:

class sdict(dict): 
    def __getattr__(self, attr): 
     return self.get(attr, None) 
    __setattr__= dict.__setitem__ 
    __delattr__= dict.__delitem__ 
    def __iadd__(self, other): 
     self.update(other) 
     return self 

>>> a = sdict() 
>>> a.b = 3 
>>> a 
{'b': 3} 
>>> a.b 
3 
>>> a['b'] 
3 
>>> a += {'fred': 3} 
>>> a 
{'b': 3, 'fred': 3} 
+0

Augh、それに私を打ち負かします!ここで、私の貴重な+1を持ってください – Blender

+0

おっと...それは愚かだった...答えてくれてありがとう! '__iadd__ = dict.update'がうまくいかない理由は何ですか? – user1084871

+1

'dict.update' returnなし – Dikei

関連する問題