開始使用免費開始

多載相等運算

當你用 == 比較自訂類別的兩個物件時,Python 預設只會比較物件參考,而不是物件裡的資料。若要改寫這種行為,可以在類別中實作特殊方法 __eq__()。它接受兩個引數(要比較的兩個物件),並回傳 TrueFalse。當兩個物件被比較時,這個方法會被隱式呼叫。

上一章的 BankAccount 類別已經在程式碼窗格中替你載入。它有一個屬性 balance,以及一個 withdraw() 方法。兩個餘額相同的帳戶不一定是同一個帳戶,但銀行帳戶通常會有「帳號」,而兩個擁有相同帳號的帳戶應被視為同一個。

本練習屬於課程

Python 物件導向程式設計

檢視課程

練習說明

試著選取第 1–7 行的程式碼,然後按下「Run Code」按鈕。接著在主控台建立幾個 BankAccount 物件並互相比較。

  • 修改 __init__() 方法,讓它接受一個新參數 number,並初始化新的屬性 number
  • 定義 __eq__() 方法,當兩個物件的 number 屬性相等時回傳 True
  • 觀察列印敘述與主控台中的輸出。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

class BankAccount:
   # MODIFY to initialize a number attribute
    def __init__(self, balance=0):
        self.balance = balance
      
    def withdraw(self, amount):
        self.balance -= amount 
    
    # Define __eq__ that returns True if the number attributes are equal 
    def ____(____, ____):
        return ____.number == ____.____   

# Create accounts and compare them       
acct1 = BankAccount(123, 1000)
acct2 = BankAccount(123, 1000)
acct3 = BankAccount(456, 1000)
print(acct1 == acct2)
print(acct1 == acct3)
    
編輯並執行程式碼