2

Python で dict のようなオブジェクトを更新するために += 表記を使用したいと思います。dict.update メソッドと同じ動作をさせたいです。これが私のクラスです(「。」アクセスの辞書):

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

しかし、これらのどれも機能しません。(1 つ目は元の辞書を破棄し、2 つ目は SyntaxError を生成します)

更新:
2 番目の定義は実際に機能します。忘れていたのでうまくいきませんでしたdef。dict.update が None を返すため、最初のものは機能しません。

4

1 に答える 1

13

私はあなたが欠けているのはdefだけだと思います:

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}
于 2012-04-05T03:50:05.813 に答える