我正在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的整个新世界
答案 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