Python 中 `__eq__`、`is` 和 `==` 的區別


Python 中的 `__eq__`、`is` 和 `==` 運算子用於比較物件的相等性。`__eq__` 方法檢查相同類物件的相等性,或者如果我們想建立自定義比較函式。`is` 運算子檢查兩個物件的記憶體位置,而 `==` 運算子僅檢查被比較的兩個物件的值。在本文中,我們將討論這三個運算子之間的區別及其用途。

方法

功能

語法

__eq__

檢查相同類物件的兩個物件的值是否相等

def __eq__(self,other)

is

檢查兩個物件是否具有相同的記憶體位置

a is b

==

檢查兩個物件的值

a == b

`__eq__()` 方法

Python 中的 `__eq__` 方法用於定義如何比較類的物件的相等性。`__eq__` 方法接受兩個引數:`self`(`==` 運算子左側的物件)和 `other`(`==` 運算子右側的物件)。`__eq__` 方法始終返回布林值(True 或 False)。如果返回的不是布林值,則會導致 TypeError。

示例

在下面的示例中,我們建立了一個名為 `Person` 的類,它有兩個屬性,分別是 `name` 和 `age`。然後,我們在類中定義 `__eq__()` 方法來比較 `person` 物件的 `name` 和 `age` 屬性。最後,建立了 `person` 類的兩個例項,即 `p1` 和 `p2`,並使用 `==` 運算子進行比較。

class Person:
   def __init__(self, name, age):
      self.name = name
      self.age = age

   def __eq__(self, other):
      if isinstance(other, Person):
         return self.name == other.name and self.age == other.age
      return False

p1 = Person("John", 30)
p2 = Person("John", 30)
if p1 == p2:
   print("p1 and p2 are equal")

輸出

p1 and p2 are equal

`is` 運算子

`is` 運算子檢查兩個物件的記憶體位置。如果兩個物件指向相同的記憶體位置,則 `is` 運算子返回 true,否則返回 false。`is` 運算子不用於檢查運算子值的相等性。

示例

在下面的示例中,我們建立了一個數組並將其賦值給另一個變數。藉助 `is` 運算子,我們可以檢查變數 a 和 b 是否引用相同的記憶體位置。

a = [1, 2, 3]
b = a
print(a is b) 

輸出

True

`==` 運算子

`==` 運算子檢查被比較的運算數或物件的值是否相等。如果運算數具有相同的值,則返回 true,否則返回 false。`==` 運算子不檢查兩個物件的記憶體位置。

示例

在下面的示例中,建立了兩個包含相同值的陣列。`==` 運算子檢查兩個列表的相等性。

a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # True

輸出

True

結論

在本文中,我們討論了 Python 中 `__eq__`、`is` 和 `==` 運算子之間的區別。`__eq__` 方法比較相同類物件的數值相等性,而 `is` 運算子檢查被比較物件的記憶體位置。`==` 運算子檢查兩個物件的值是否相等。

更新於:2023年4月17日

6K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告