開始使用免費開始

檢查類別是否相同

在上一個練習中,你定義了一個具備 number 屬性的 BankAccount 類別,並用它來做比較。不過,如果你把 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 物件導向程式設計入門

檢視課程

練習說明

  • 修改 BankAccount 的定義,只有在 number 屬性相同,且兩個傳入物件的 type() 相同時才回傳 True
  • 檢查 acctpn 是否相等。

動手互動練習

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

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 class type
  def __eq__(self, other):
    return (self.number == other.number) ____

acct = BankAccount(873555333)
pn = Phone(873555333)

# Check if the two objects are equal
print(____)
編輯並執行程式碼