Kom igångKom igång gratis

Kontrollera klassequivalens

I föregående övning definierade du en BankAccount-klass med ett number-attribut som användes vid jämförelse. Men om du jämför ett BankAccount-objekt med ett objekt från en annan klass som också har ett number-attribut kan du få oväntade resultat.

Tänk till exempel på dessa två klasser:


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)

Om du kör acct == pn returneras True, trots att du jämför ett telefonnummer med ett bankkontonummer.

Det är god praxis att kontrollera klassen hos de objekt som skickas till metoden __eq__(), för att säkerställa att jämförelsen är meningsfull.

Den här övningen är en del av kursen

Objektorienterad programmering i Python

Visa kurs

Övningsinstruktioner

Både klassen Phone och klassen BankAccount har definierats. Kör koden som den är med knappen "Run code" och undersök utdata.

  • Ändra definitionen av BankAccount så att den bara returnerar True om attributet number är detsamma och type() för båda objekten som skickas in är densamma.

Kör koden och undersök utdata igen.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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)
Redigera och kör kod