[ Python ] 常用運算子對應的魔法方法

YEUNGCHIE發表於2024-06-02

https://www.cnblogs.com/yeungchie/

Python中的運算子豐富多樣,它們可以分為多個類別,包括算術運算子、比較運算子、邏輯運算子、位運算子、身份運算子、成員運算子等。每個運算子都有其對應的魔法方法(也稱為特殊方法或dunder方法,即雙下劃線方法),這些方法在特定情況下會被Python呼叫來實現運算子的行為。下面是一些常見運算子及其對應的魔法方法:

算術運算子

  • + 加法:__add__(self, other)
  • - 減法:__sub__(self, other)
  • * 乘法:__mul__(self, other)
  • / 除法(Python 3 中為真除法):__truediv__(self, other)
  • // 整除:__floordiv__(self, other)
  • % 取模:__mod__(self, other)
  • ** 冪運算:__pow__(self, other[, modulo])
  • +(一元正號):__pos__(self)
  • -(一元負號):__neg__(self)
  • ~(按位取反,不常用):__invert__(self)

比較運算子

  • == 等於:__eq__(self, other)
  • != 不等於:__ne__(self, other)
  • < 小於:__lt__(self, other)
  • > 大於:__gt__(self, other)
  • <= 小於等於:__le__(self, other)
  • >= 大於等於:__ge__(self, other)

邏輯運算子

Python中沒有直接的魔法方法對應邏輯運算子,邏輯運算通常透過andornot關鍵字實現

位運算子

  • & 按位與:__and__(self, other)
  • | 按位或:__or__(self, other)
  • ^ 按位異或:__xor__(self, other)
  • << 左移:__lshift__(self, other)
  • >> 右移:__rshift__(self, other)

身份運算子

  • is 沒有直接對應的魔法方法,因為這是Python直譯器直接處理的。
  • is not 同上。

成員運算子

  • in 沒有直接對應的魔法方法,但可以透過重寫__contains__(self, item)來影響in的判斷邏輯。
  • not in 間接透過__contains__方法影響。

其他特殊方法

  • +(用於字串拼接或列表合併):根據物件型別不同,可能呼叫__add__或特定型別的其他方法。
  • [](索引和切片):__getitem__(self, key)__setitem__(self, key, value)__delitem__(self, key)
  • ()(呼叫):__call__(self[, args...])

這些魔法方法允許你在自定義類中過載運算子,從而讓類例項支援這些運算子的行為。需要注意的是,實現這些方法時應遵循運算子的常規語義,以保持程式碼的一致性和可預測性。

相關文章