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

Python能否实现运算符双向重载?使操作数顺序不影响运算

Python中让运算符重载支持左右操作数顺序无关的方法

当你写A(1) + 4时,Python会调用A类的__add__方法,所以能正常运行;但反过来4 + A(1)时,Python会先尝试调用int类的__add__方法,而int类型根本不知道怎么处理A的实例,所以会抛出TypeError。

要解决这个问题,你需要给A类实现反向运算符重载方法——__radd__,它会在左操作数不支持与当前类实例的运算时被调用。

修改后的代码如下:

class A:
    def __init__(self, x: int):
        self.x = x

    def __add__(self, other: int):
        return self.x + other

    # 实现反向加法方法
    def __radd__(self, other: int):
        # 因为加法满足交换律,直接复用__add__的逻辑就行
        return self.__add__(other)

a = A(1) + 4  # 结果为5
a = 4 + A(1)  # 现在正常运行,结果也是5

额外说明:

  • 对于其他二元运算符,都有对应的反向方法:比如减法对应__rsub__、乘法对应__rmul__、除法对应__rtruediv__等。
  • 需要注意的是,像减法、除法这种本身不满足交换律的运算,不能直接复用正向方法的逻辑,得根据实际需求重新实现反向方法的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:03:58