開始使用免費開始

檢查類別是否相同

在前一題中,你定義了一個 BankAccount 類別,並用 number 屬性來進行比較。不過,如果你把一個 BankAccount 物件拿去和另一個類別、但同樣具有 number 屬性的物件比較,結果可能會出乎意料。

例如,考慮以下兩個類別:


class Phone:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
          other.number

pn = Phone(873555333)

class BankAccount:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
           other.number

acct = BankAccount(873555333)

執行 acct == pn 會回傳 True,即使我們比較的是電話號碼與銀行帳號。

良好的做法是:在 __eq__() 方法中檢查傳入物件的類別,確保這個比較是合理的。

本練習屬於課程

Python 物件導向程式設計

檢視課程

練習說明

PhoneBankAccount 類別都已定義好。先按下「Run code」按鈕直接執行目前的程式碼,並觀察輸出結果。

  • 修改 BankAccount 的定義,讓它只在 number 屬性相同,且兩個傳入物件的 type() 也相同時才回傳 True

再次執行程式碼並檢視輸出結果。

動手互動練習

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

class BankAccount:
    def __init__(self, number, balance=0):
        self.number, self.balance = number, balance
      
    def withdraw(self, amount):
        self.balance -= amount 

    # MODIFY to add a check for the type()
    def __eq__(self, other):
        return (self.number == other.number)

acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)
編輯並執行程式碼