在Python中,運算子過載是一種允許你定義或修改內建運算子(例如 +
, -
, *
, /
等)在自定義類中的行為的技術。透過過載運算子,你可以使這些運算子對自定義物件執行特定的操作。運算子過載是透過在類中定義特殊方法(也稱為魔法方法)來實現的,這些方法通常以雙下劃線開頭和結尾。
以下是一些常見運算子及其對應的魔法方法:
-
算術運算子:
+
(加法):__add__(self, other)
-
(減法):__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)
-
位運算子:
&
(按位與):__and__(self, other)
|
(按位或):__or__(self, other)
^
(按位異或):__xor__(self, other)
~
(按位取反):__invert__(self)
<<
(左移):__lshift__(self, other)
>>
(右移):__rshift__(self, other)
-
其他運算子:
[]
(索引):__getitem__(self, key)
in
(成員關係):__contains__(self, item)
len()
(長度):__len__(self)
下面是一個簡單的示例,展示如何過載加法運算子 +
和比較運算子 ==
:
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 __eq__(self, other):
return self.x == other.x and self.y == other.y
def __repr__(self):
return f"Vector({self.x}, {self.y})"
# 示例用法
v1 = Vector(2, 3)
v2 = Vector(5, 7)
v3 = v1 + v2
print(v3) # 輸出: Vector(7, 10)
print(v1 == v2) # 輸出: False
print(v1 == Vector(2, 3)) # 輸出: True
在這個示例中:
__add__
方法定義瞭如何將兩個Vector
物件相加。__eq__
方法定義瞭如何比較兩個Vector
物件是否相等。__repr__
方法定義了當列印Vector
物件時的輸出格式。