python - __add__ 支持不同类型的添加?
问题描述
如果 python 是一种支持重载的静态编程语言,将很容易解决。我正在制作一个名为 Complex 的类,它是复数的表示形式(我知道 python 有它自己的,但我想自己制作一个),其中 a 是实数,b 是虚数(Complex(a, b)
)。它应该支持将复杂实例添加在一起 ( Complex(2, 4) + Complex(4, 5) = Complex(6, 9)
),以及添加整数 ( Complex(2, 3) + 4 = Complex(6, 3)
)。然而,由于python的性质......
__add__(self, other):
...我必须选择该类将支持哪个,因为它在编译时无法识别类型,也不支持函数重载。什么是最好的解决方案?我是否必须编写与other
参数数据类型相关的 if 语句?
解决方案
您可以做的是检查实例 Complex 的事物,如果没有,则将其变成一个,如下所示:
def __add__(self, other):
if isinstance(other, Complex):
# do addition
else:
return self + Complex(other, 0)
这当然不会消除类型检查,但它会重用你正在做的任何事情__init__
(这可能是检查输入是 int 还是 float)。
如果此时您不在 init 中进行类型检查,这可能是一个好主意,这看起来很合理,除了内置的复杂类型。
推荐阅读
- r - pdfpages Latex 包未找到
- java - 使用导航组件而不使用 ViewModel 时如何在后台堆栈中保留 Fragment 实例?
- flutter - 在颤动中对列表进行排序,其中 0 到底部
- mysql - 在 Docker 上的 Mysql 中启用 local-infile
- google-cloud-storage - 如何最好地将 HTML 与字符串一起存储在 Cloud Storage 中
- vue.js - Vue Cli 4.4.6 是否将 ES2020 脚手架到项目中
- javascript - 一旦命令执行者的命令被编辑,机器人如何编辑它的消息?
- powershell - Powershell,无法输入带有一些非 ASCII 字符的哈希表键(在脚本中)
- postgresql - 在 postgres 的模式中查找每个表上的行数
- ms-access - MS Access - 使用 GROUPBY 查询 - 显示具有零值的组