首页 > 解决方案 > 我必须覆盖整数 __add__ 方法以支持整数和对象的加法吗?

问题描述

所以我正在制作一个名为 Complex 的类,它表示虚数(我知道 python 有它自己的,但我想自己做一个)。事情是我想构造一个支持复数和整数相加的add方法。所以:

a = Complex(2, 4) + Complex(1, 1)
b = Complex(0, 3) + 3
c = 2 + Complex(4, 5)

应该都支持。我认为,

object1 + object2

是句法糖等价物

object1.__add__(object2)

第一个和第二个例子都很好,但是如何让我的班级支持 INTEGER + COMPLEX 形式的加法?如果需要,我是否必须覆盖整数 __add__ 方法;我该怎么做,还有其他方法吗?

标签: pythonaddmagic-methods

解决方案


你必须__radd__Complex.

这种工作方式非常酷,如果对象上没有现有实现 for __add__,在您的情况下,int+ Complex,python将自动检查是否__radd__在右侧对象上实现。

所以它会像:

- does `int` have `__add__` for `Complex`? no
- does `Complex` have `__radd__` for `int`? yes. cool, we've solved it

实现可能看起来像:

class Complex:
    def __radd__(self, other):
        return self + Complex(other)

推荐阅读