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

Python中如何实现首个参数为内置类型的运算符重载?

反向运算符重载解决方案

可以实现首个参数为内置类型的运算符重载,你遇到的报错是因为仅实现了正向加法的__add__方法,未实现Python预留的反向运算符魔术方法。

原理说明

Python执行a + b运算时的调用逻辑如下:

  • 优先调用左侧对象a的__add__(b)方法
  • 若左侧对象的__add__方法返回NotImplemented(内置类型int的__add__无法识别自定义Variable类,就会返回该值),则会自动调用右侧对象b的__radd__(a)方法

你的场景中1 + x触发int的__add__不支持Variable类型,而Variable类没有实现__radd__,因此抛出类型错误。

代码修改示例

只需在Variable类中新增__radd__方法,加法满足交换律,可以直接复用__add__的逻辑:

class Variable:
    def __init__(self, value):       
        self.value = value

    def __add__(self, other):
        if isinstance(other, self.__class__):
            return self.value + other.value
        elif isinstance(other, (int, float, complex)):
            return self.value + other
        else:
            raise ValueError('Wrong data type')
    
    # 新增反向加法实现
    def __radd__(self, other):
        return self.__add__(other)

效果验证

修改后即可正常执行调换顺序的加法运算:

>>> x = Variable(3)
>>> 1 + x
4

拓展说明

所有二元运算符都有对应的反向实现方法,命名规则为__r{运算符方法名}__,例如减法对应__rsub__、乘法对应__rmul__、除法对应__rtruediv__,如果需要支持这些运算符的反向调用,按相同逻辑实现即可。

内容的提问来源于stack exchange,提问作者wong.lok.yin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:00:05