Aan de slagGa gratis aan de slag

Gelijkheid overbelasten

Als je twee objecten van een eigen klasse vergelijkt met ==, vergelijkt Python standaard alleen de objectreferenties, niet de data in de objecten. Om dit te overschrijven, kan de klasse de speciale methode __eq__() implementeren, die twee argumenten accepteert — de te vergelijken objecten — en True of False teruggeeft. Deze methode wordt impliciet aangeroepen wanneer twee objecten worden vergeleken.

De klasse BankAccount uit het vorige hoofdstuk staat voor je klaar in het scriptpaneel. De klasse heeft één attribuut, balance, en een methode withdraw(). Twee bankrekeningen met hetzelfde saldo zijn niet per se dezelfde rekening, maar een bankrekening heeft meestal een rekeningnummer, en twee rekeningen met hetzelfde rekeningnummer moeten als dezelfde worden beschouwd.

Deze oefening maakt deel uit van de cursus

Objectgeoriënteerd programmeren in Python

Cursus bekijken

Oefeninstructies

Selecteer de code op regels 1-7 en klik op de knop "Code uitvoeren". Maak daarna een paar BankAccount-objecten in de console en vergelijk ze.

  • Pas de methode __init__() aan zodat die een nieuwe parameter number accepteert en initialiseer een nieuw attribuut number.
  • Definieer een methode __eq__() die True teruggeeft als het attribuut number van twee objecten gelijk is.
  • Bekijk de print-statements en de output in de console.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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)
    
Code bewerken en uitvoeren