如何更改可以添加到 python 中的整数的内容?
How do you change what can be added to an integer in python?
我一直在尝试使用 python 中的 类 来使新变量类型成为四元数。
我已经弄清楚如何让它添加一个整数或一个浮点数,但我不知道如何让它添加一个四元数到 float/integer。我只编码了大约一个月,试图学习如何编程制作“不同数字系统的通用计算器”或 UCFDNS。我也在努力让它适用于 __sub__、__mul__、__div__。有可能吗?
class Quaternion:
def __init__(self, a, b, c, d):
self.real = a
self.imag1 = b
self.imag2 = c
self.imag3 = d
#addition
def __add__(self, other):
if type(other) == int or type(other) == float:
other1 = Quaternion(other,0,0,0)
return other1 + self
elif type(other)==type(self):
return Quaternion(other.real+self.real,other.imag1+self.imag1,other.imag2+self.imag2,other.imag3+self.imag3)
else:
print('You can'+"'"+'t add a',type(other),' with a QuaternionNumber')
import sys
sys.exit(1)
__add__
的正确实现应该 return 特殊常量 NotImplemented
如果它不知道如何处理加法。所有 Python 内建的 classes 都是为了遵守这一点而编写的。如果 __add__
returns NotImplemented
则 Python 将在右侧调用 __radd__
。所以你需要做的就是实现 __radd__
来做与 __add__
基本相同的事情,你的 class 将神奇地开始使用内置类型。
请注意,为了尊重其他做同样事情的人,如果您无法处理操作,您也应该 return NotImplemented
,因此您的 __add__
(和 __radd__
)应该看起来像
def __add__(self, other):
if type(other) == int or type(other) == float:
other1 = Quaternion(other,0,0,0)
return other1 + self
elif type(other)==type(self):
return ComplexNumber(other.real+self.real,other.imag1+self.imag1,other.imag2+self.imag2,other.imag3+self.imag3)
else:
return NotImplemented
还要记住 __add__
和 __radd__
看起来是一样的,因为加法是可交换的。但是 __sub__
和 __rsub__
看起来会有所不同,因为在 __rsub__
中,self
是 右侧 减法运算和顺序很重要。
我一直在尝试使用 python 中的 类 来使新变量类型成为四元数。 我已经弄清楚如何让它添加一个整数或一个浮点数,但我不知道如何让它添加一个四元数到 float/integer。我只编码了大约一个月,试图学习如何编程制作“不同数字系统的通用计算器”或 UCFDNS。我也在努力让它适用于 __sub__、__mul__、__div__。有可能吗?
class Quaternion:
def __init__(self, a, b, c, d):
self.real = a
self.imag1 = b
self.imag2 = c
self.imag3 = d
#addition
def __add__(self, other):
if type(other) == int or type(other) == float:
other1 = Quaternion(other,0,0,0)
return other1 + self
elif type(other)==type(self):
return Quaternion(other.real+self.real,other.imag1+self.imag1,other.imag2+self.imag2,other.imag3+self.imag3)
else:
print('You can'+"'"+'t add a',type(other),' with a QuaternionNumber')
import sys
sys.exit(1)
__add__
的正确实现应该 return 特殊常量 NotImplemented
如果它不知道如何处理加法。所有 Python 内建的 classes 都是为了遵守这一点而编写的。如果 __add__
returns NotImplemented
则 Python 将在右侧调用 __radd__
。所以你需要做的就是实现 __radd__
来做与 __add__
基本相同的事情,你的 class 将神奇地开始使用内置类型。
请注意,为了尊重其他做同样事情的人,如果您无法处理操作,您也应该 return NotImplemented
,因此您的 __add__
(和 __radd__
)应该看起来像
def __add__(self, other):
if type(other) == int or type(other) == float:
other1 = Quaternion(other,0,0,0)
return other1 + self
elif type(other)==type(self):
return ComplexNumber(other.real+self.real,other.imag1+self.imag1,other.imag2+self.imag2,other.imag3+self.imag3)
else:
return NotImplemented
还要记住 __add__
和 __radd__
看起来是一样的,因为加法是可交换的。但是 __sub__
和 __rsub__
看起来会有所不同,因为在 __rsub__
中,self
是 右侧 减法运算和顺序很重要。