我试图用Python编写一个模拟复数的类。是的,我知道已经有一个内置函数
complex()
j
创造他们。但是我想写我自己的只是为了好玩。下面是它的一个小版本:
class Complex:
def __init__(self, real: float = 0, img: float = 0):
self.real = real
self.img = img
self.num = (self.real, self.img)
def __repr__(self) -> str:
string = "{real}".format(real=self.real) if self.real != 0 else ""
# Want to have "a + bi", "a", "bi"
# Want to avoid "+ bi" or "a + "
if self.real != 0 and self.img < 0:
string += " - " # img will already have -
elif self.real != 0 and self.img > 0:
string += " + "
string += "{img}i".format(img=abs(self.img)) if self.img != 0 else ""
return string
def __add__(self, other: 'Complex') -> 'Complex':
return Complex(self.real + other.real, self.img + other.img)
def __sub__(self, other: 'Complex') -> 'Complex':
return Complex(self.real - other.real, self.img - other.img)
def __matmul__(self, other: 'Complex') -> 'Complex':
# (ac - bd)
real = self.real * other.real - self.img * other.img
# (ad + bc)
img = self.real * other.img + self.img * other.real
return Complex(real, img)
def __mul__(self, other):
return Complex(self.real * other, self.img * other)
def __rmul__(self, other):
return self.__mul__(other)
问题是,我找不到一种定义以下内容的方法:
Complex*Complex(类实例的左乘法)
float*Complex(右标量乘法,但也可以使用int)
这是因为当我将两个类实例相乘时,它仍然调用
__mul__
__matmul__
. 我想
__马特姆__
@
操作员。我怎样才能在不使用其他操作员的情况下完成所有这些工作(
) ? 我想用标准
*
操作员。