Python 運算子過載

Undefined443發表於2024-06-08

在Python中,運算子過載是一種允許你定義或修改內建運算子(例如 +, -, *, / 等)在自定義類中的行為的技術。透過過載運算子,你可以使這些運算子對自定義物件執行特定的操作。運算子過載是透過在類中定義特殊方法(也稱為魔法方法)來實現的,這些方法通常以雙下劃線開頭和結尾。

以下是一些常見運算子及其對應的魔法方法:

  1. 算術運算子

    • + (加法): __add__(self, other)
    • - (減法): __sub__(self, other)
    • * (乘法): __mul__(self, other)
    • / (除法): __truediv__(self, other)
    • // (整除): __floordiv__(self, other)
    • % (取模): __mod__(self, other)
    • ** (冪): __pow__(self, other)
  2. 比較運算子

    • == (等於): __eq__(self, other)
    • != (不等於): __ne__(self, other)
    • < (小於): __lt__(self, other)
    • <= (小於等於): __le__(self, other)
    • > (大於): __gt__(self, other)
    • >= (大於等於): __ge__(self, other)
  3. 位運算子

    • & (按位與): __and__(self, other)
    • | (按位或): __or__(self, other)
    • ^ (按位異或): __xor__(self, other)
    • ~ (按位取反): __invert__(self)
    • << (左移): __lshift__(self, other)
    • >> (右移): __rshift__(self, other)
  4. 其他運算子

    • [] (索引): __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 物件時的輸出格式。

相關文章