如何在python

时间:2019-07-06 10:43:33

标签: python complex-numbers

我正在python中创建一个我想与自定义算术算法一起使用的类。为了对其实例进行操作,我已覆盖了其所有运算符功能,例如__add __,__ mul __,__ truediv__等。

例如,假设它是一个 complex 类:

class complex:
    def __init__(self,module,phase):
        self.module = module
        self.phase = phase
    def __mul__(self,other):
        return complex(self.module + other.module, self.phase + other.phase)
    def __truediv__(self,other):
        return complex(self.module / other.module, self.phase - other.phase)

我希望能够将表达式写为:

from math import pi
a = complex(1,0.5*pi)
b = 1/a

但是,如果这样做,将会出现以下错误:

/的不支持的操作数类型:“ int”和“ complex”

虽然我想要得到的结果

b = complex(1,0) / a

要使其正常运行,我必须重写什么?

编辑:

感谢hiro protagonist的评论,我才发现Emulating numeric types的整个新世界

2 个答案:

答案 0 :(得分:0)

您需要定义__rtruediv__(self,other),这是当对象位于分隔线的右侧时使用的功能。

,也许也适用于其他运营商:

def __radd__(self, other):       ... 
def __rsub__(self, other):       ...
def __rmul__(self, other):       ...
def __rmatmul__(self, other):    ...
def __rfloordiv__(self, other):  ...
def __rmod__(self, other):       ...
def __rdivmod__(self, other):    ...

您可以使用其他已有的来定义它们:

def __rtruediv__(self,other):
    return complex(other,0).__truediv__(self)

答案 1 :(得分:-1)

为什么不使用内置的complex类型和cmath

a = 1+2j
b = 1/a