我必须覆盖整数 __add__ 方法以支持整数和对象的相加吗?
Must I override integer __add__ method to support addition of an integer and object?
所以我正在制作一个名为 Complex 的 class,它表示虚数(我知道 python 有它自己的,但我想自己制作一个)。事情是我想构建一个 add 方法来支持复数和整数的加法。所以:
a = Complex(2, 4) + Complex(1, 1)
b = Complex(0, 3) + 3
c = 2 + Complex(4, 5)
应该都支持。据我了解,
object1 + object2
是
的语法糖等价物
object1.__add__(object2)
第一个和第二个示例都很好,但是如何让我的 class 支持对 INTEGER + COMPLEX 形式的加法?如果是这样,我是否必须覆盖整数 __add__method?我该怎么做,还有其他方法吗?
您必须在 Complex
上实施 __radd__
。
这种工作方式非常酷,如果 __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)
所以我正在制作一个名为 Complex 的 class,它表示虚数(我知道 python 有它自己的,但我想自己制作一个)。事情是我想构建一个 add 方法来支持复数和整数的加法。所以:
a = Complex(2, 4) + Complex(1, 1)
b = Complex(0, 3) + 3
c = 2 + Complex(4, 5)
应该都支持。据我了解,
object1 + object2
是
的语法糖等价物object1.__add__(object2)
第一个和第二个示例都很好,但是如何让我的 class 支持对 INTEGER + COMPLEX 形式的加法?如果是这样,我是否必须覆盖整数 __add__method?我该怎么做,还有其他方法吗?
您必须在 Complex
上实施 __radd__
。
这种工作方式非常酷,如果 __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)