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

但这些都不起作用。(第一个破坏了原来的字典,第二个产生了 SyntaxError)

更新:
第二个定义确实有效。它对我不起作用,因为我忘记了def。第一个不起作用,因为 dict.update 返回 None。

4

1 回答 1

13

我认为你所缺少的只是一个定义:

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 回答