python - 在 python 中为映射类型重载 +=

标签 python dictionary operator-overloading

我想在 Python 中使用 += 符号来更新类似 dict 的对象。我想拥有与 dict.update 方法相同的行为。这是我的类(class)(带有“.”访问权限的字典):

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。

最佳答案

我认为你缺少的只是一个 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}

关于python - 在 python 中为映射类型重载 +=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10022405/

相关文章:

多个派生类之间的 C++ 运算符重载

c++ - 覆盖 ADL 选择的重载

python - pyqt 在现有的 GUI 小部件上绘图

java - 创建 MutableGuiceKeyToInstanceMap 的最简单方法?

python - 如何检查字典中的两个键是否具有相同的值

python - 到/来自列表的字典的字典列表

c++ - 为什么 myClassObj++++ 不会产生编译错误 : '++' needs l-value just as buildin type do?

python - mysql python并发访问同一表列

python - 使用 flask-wtforms 更改 textarea 的值

Python错误 'int'对象没有属性 'shape'