Kom igångKom igång gratis

Överlagra likhet

När du jämför två objekt av en egen klass med == jämför Python som standard bara objektreferenserna, inte den data som finns i objekten. För att ändra det beteendet kan klassen implementera den speciella metoden __eq__(), som tar emot två argument – de objekt som ska jämföras – och returnerar True eller False. Metoden anropas implicit när två objekt jämförs.

Klassen BankAccount från föregående kapitel finns tillgänglig i skriptfönstret. Den har ett attribut, balance, och en metod withdraw(). Två bankkonton med samma saldo är inte nödvändigtvis samma konto, men ett bankkonto har vanligtvis ett kontonummer, och två konton med samma kontonummer bör betraktas som identiska.

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

Objektorienterad programmering i Python

Visa kurs

Övningsinstruktioner

Markera koden på raderna 1–7 och klicka på knappen "Kör koden". Skapa sedan några BankAccount-objekt i konsolen och jämför dem.

  • Ändra metoden __init__() så att den tar emot en ny parameter – number – och initialiserar ett nytt attribut number.
  • Definiera en metod __eq__() som returnerar True om attributet number är lika för de två objekten.
  • Granska print-satserna och utdata i konsolen.

Interaktiv övning med praktiskt arbete

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

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