You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Python内置set类添加__add__与__radd__方法?

为Python内置set类添加__add__和__radd__的正确姿势

符合Python风格的实现方式

Python里集合的合并操作通常用|运算符(对应__or__方法)实现并集,但如果非要用+运算符完成类似逻辑,最符合Python风格的做法是继承内置set类,在子类中实现__add__和__radd__方法。这种方式不会破坏内置类型的原有行为,同时能扩展出你需要的功能。

示例实现:

class MySet(set):
    def __add__(self, other):
        if not isinstance(other, set):
            return NotImplemented
        return MySet(self | other)
    
    __radd__ = __add__  # 集合加法满足交换律,直接复用__add__逻辑

关键细节:

  • 返回新的MySet实例而非修改原对象,契合Python中不可变操作的惯例(比如字符串、元组的操作均返回新对象)
  • 检查other类型,若不是set则返回NotImplemented,让Python尝试调用对方的__radd__方法,符合运算符重载的规范
  • __radd__直接指向__add__,因为a + b和b + a对于集合合并结果一致

能否直接修改内置set类的__add__方法?

不行。Python的内置类型(如set、int、str等)的特殊方法不可修改,它们的方法定义在C语言层面,无法通过set.__add__ = 自定义函数的方式扩展。尝试这么做会抛出TypeError: can't set attributes of built-in/extension type 'set'的错误。

这是Python的设计决定:内置类型的行为需要保持稳定一致,随意修改会引发不可预料的问题,比如破坏依赖内置类型行为的标准库或第三方库代码。

内容的提问来源于stack exchange,提问作者Gerald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:06:26