在 Python 里,符号重载能够借助魔术方法来实现。魔术方法是指那些名称以双下划线开头和结尾的特殊方法。下面为你列举一些和符号重载相关的魔术方法及其代表的含义:
算术运算符重载
__add__(self, other):实现加法运算+,例如a + b会调用a.__add__(b)。__sub__(self, other):实现减法运算-。__mul__(self, other):实现乘法运算*。__truediv__(self, other):实现真除法运算/。__floordiv__(self, other):实现整除运算//。__mod__(self, other):实现取模运算%。__pow__(self, other):实现幂运算**。
比较运算符重载
__eq__(self, other):实现相等比较==。__ne__(self, other):实现不相等比较!=。__lt__(self, other):实现小于比较<。__le__(self, other):实现小于等于比较<=。__gt__(self, other):实现大于比较>。__ge__(self, other):实现大于等于比较>=。
赋值运算符重载
__iadd__(self, other):实现就地加法运算+=。__isub__(self, other):实现就地减法运算-=。__imul__(self, other):实现就地乘法运算*=。__itruediv__(self, other):实现就地真除法运算/=。__ifloordiv__(self, other):实现就地整除运算//=。__imod__(self, other):实现就地取模运算%=。__ipow__(self, other):实现就地幂运算**=。
其他运算符重载
__neg__(self):实现一元负号运算-obj。__pos__(self):实现一元正号运算+obj。__abs__(self):实现绝对值运算abs(obj)。__len__(self):实现长度运算len(obj)。__getitem__(self, key):实现索引访问obj[key]。__setitem__(self, key, value):实现索引赋值obj[key] = value。__delitem__(self, key):实现索引删除del obj[key]。
以下是一个简单的示例代码,展示了如何使用 __add__ 方法重载加法运算符:
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 __str__(self):
return f"Vector({self.x}, {self.y})"
v1 = Vector(1, 2)
v2 = Vector(3, 4)
v3 = v1 + v2
print(v3)
在这个示例中,Vector 类重载了 __add__ 方法,使得两个 Vector 对象可以使用 + 运算符进行相加。