📜  Python运算符重载(1)

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

Python运算符重载

什么是运算符重载?

在Python中,运算符重载是指为自定义的类重新定义Python内置运算符的行为。这样,我们就可以通过自定义的操作符来实现特定的功能,让代码更加简洁、易于阅读和理解。

Python中的运算符通常都是在内置类型中定义的,但是它们可以被自定义的类型以不同的方式使用,使得我们能够自由地实现自己的运算逻辑。

重载哪些运算符?

Python允许我们重载以下运算符:

| 运算符 | 魔法方法 | 说明 | | :----: | :-------: | :--------------------------: | | + | __add__ | 加法运算 | | - | __sub__ | 减法运算 | | * | __mul__ | 乘法运算 | | / | __truediv__ | 真除法运算 | | // | __floordiv__ | 地板除法运算 | | % | __mod__ | 取模运算 | | ** | __pow__ | 幂运算 | | << | __lshift__ | 左移运算 | | >> | __rshift__ | 右移运算 | | & | __and__ | 按位与运算 | | | | __or__ | 按位或运算 | | ^ | __xor__ | 按位异或运算 | | ~ | __invert__ | 按位取反 | | < | __lt__ | 小于运算 | | <= | __le__ | 小于等于运算 | | > | __gt__ | 大于运算 | | >= | __ge__ | 大于等于运算 | | == | __eq__ | 等于运算 | | != | __ne__ | 不等于运算 | | [] | __getitem__ | 获取元素 | | []= | __setitem__ | 设置元素 | | () | __call__ | 调用运算符 |

如何重载运算符?

我们可以通过在自定义的类中定义特殊方法,即魔法方法(Magic Method)来重载运算符。

例如,我们可以定义一个类,重载'+'运算符,使其将两个对象相加返回一个新的对象:

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

    def __str__(self):
        return '({0}, {1})'.format(self.x, self.y)

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

p1 = Point(1, 2)
p2 = Point(3, 4)
print(p1 + p2)  # 输出 (4, 6)

在上面的例子中,我们定义了一个名为'Point'的类,该类包含两个属性'x'和'y',以及一个魔法方法'add'(重载'+'运算符),用来将两个'Point'对象相加。'add'方法的返回值是一个新的'Point'对象,其'x'和'y'属性值分别是两个对象相加后的结果。

重载'+'运算符后,我们可以直接将两个'Point'对象相加,而不需要编写一个专门的方法来执行相加操作。

总结

Python允许我们为自定义类重载Python内置运算符的行为,从而实现自定义的运算逻辑。我们只需要在类中定义特殊方法,即魔法方法,就可以轻松地实现运算符重载。