首页 > 解决方案 > __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 语句?

标签: pythonoverloadingadd

解决方案


您可以做的是检查实例 Complex 的事物,如果没有,则将其变成一个,如下所示:

def __add__(self, other):
    if isinstance(other, Complex):
        # do addition
    else:
        return self + Complex(other, 0)

这当然不会消除类型检查,但它会重用你正在做的任何事情__init__(这可能是检查输入是 int 还是 float)。

如果此时您不在 init 中进行类型检查,这可能是一个好主意,看起来很合理,除了内置的复杂类型。


推荐阅读