python - 我必须覆盖整数 __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__ 方法;我该怎么做,还有其他方法吗?
解决方案
你必须__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)
推荐阅读
- asp.net-core-mvc - Jwt 令牌总是返回 401 .net core 3.1 web api
- javascript - 如何在javascript中找到净工资的值?
- postgresql - 使用 go 的 sqlx 在 postgres 表中插入记录并自动生成 ID
- ios - 解析 incrementKey 使 iOS 应用程序崩溃
- sass - 如何像在 React 中一样在 Preact 中简单地导入样式?
- python - 找到元素后的Break For循环
- javascript - 打印弹出模式窗口的内容
- lua - lua 中的脚本有问题,错误为零值(本地“xPlayer”)
- java - 如何在 Android Studio 的 datasnapshot/recyclerview 中创建条件?
- c# - 选择一个字符并通过反转部分代码输出整个单词问题