📜  Python中的运算符重载(1)

📅  最后修改于: 2023-12-03 15:04:37.375000             🧑  作者: Mango

Python中的运算符重载

Python中的运算符重载是指在类中自定义运算符的行为,使得运算符可以用于对象。这种重载可以使代码更加简洁,同时也可以让代码更加易于理解。

相关方法

Python中的每个运算符都对应着一个特殊方法,我们可以通过在类中实现这些方法来重载运算符。

以下是常用的运算符和对应方法:

运算符 | 方法 -|- 加法 + | __add__(self, other) 减法 - | __sub__(self, other) 乘法 * | __mul__(self, other) 除法 / | __truediv__(self, other) 求余 % | __mod__(self, other) 整除 // | __floordiv__(self, other)** | __pow__(self, other) 正号 + | __pos__(self) 负号 - | __neg__(self) 相等 == | __eq__(self, other) 不等 != | __ne__(self, other) 小于 < | __lt__(self, other) 小于等于 <= | __le__(self, other) 大于 > | __gt__(self, other) 大于等于 >= | __ge__(self, other)

代码示例

下面的代码展示了如何在一个类中重载运算符:

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __sub__(self, other):
        return Vector(self.x - other.x, self.y - other.y)

    def __mul__(self, scalar):
        return Vector(self.x * scalar, self.y * scalar)

    def __truediv__(self, scalar):
        return Vector(self.x / scalar, self.y / scalar)

    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

    def __str__(self):
        return f"({self.x}, {self.y})"

v1 = Vector(1, 2)
v2 = Vector(3, 4)

print(v1 + v2)    # 输出:(4, 6)
print(v1 - v2)    # 输出:(-2, -2)
print(v1 * 2)     # 输出:(2, 4)
print(v2 / 2)     # 输出:(1.5, 2.0)
print(v1 == v2)   # 输出:False

在上面的示例中,我们自定义了Vector类中的加法、减法、乘法和除法运算符的行为,并重载了相等运算符。我们还实现了__str__方法,以便在打印对象时获取对象的字符串表示。

总结

运算符重载可以使代码更加简洁、易于理解,使我们的类更像内置类型。不过要注意,这种重载应该是符合逻辑的,并且你应该在实现时考虑到不同的输入类型和边界条件。