__add__ 支持添加不同类型?

Snu*_*fer 5 python overloading add

如果 python 是一种支持重载的静态编程语言,将很容易解决。我正在制作一个名为 Complex 的类,它是复数的表示(我知道 python 有它自己的,但我想自己制作一个),其中 a 是实数, b 是虚数 ( Complex(a, b))。它应该支持将 Complex 实例添加到一起 ( Complex(2, 4) + Complex(4, 5) = Complex(6, 9)),以及添加一个整数 ( Complex(2, 3) + 4 = Complex(6, 3))。但是,由于python的性质...

__add__(self, other):
Run Code Online (Sandbox Code Playgroud)

...我必须选择该类将支持哪个,因为它不会在编译时识别类型,也不支持函数的重载。最好的解决方案是什么?我是否必须编写与other参数数据类型相关的 if 语句?

And*_*rei 2

你可以做的是检查实例是否为 Complex,如果不是,则将其变成一个,如下所示:

def __add__(self, other):
    if isinstance(other, Complex):
        # do addition
    else:
        return self + Complex(other, 0)
Run Code Online (Sandbox Code Playgroud)

当然,这并不能消除类型检查,但它会重用您正在执行的任何操作__init__(这可能是检查输入是 int 还是 float)。

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