如何更改可以添加到 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 右侧 减法运算和顺序很重要。