Kom igångKom igång gratis

Kontrollera klassequivalens

I den föregående övningen definierade du en BankAccount-klass med ett number-attribut som användes för 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.

Betrakta till exempel 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)

Att köra acct == pn returnerar True, trots att jämförelsen görs mellan ett telefonnummer och 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

Introduktion till objektorienterad programmering i Python

Visa kurs

Övningsinstruktioner

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

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