Aan de slagGa gratis aan de slag

Gelijkheid overbelasten

Wanneer je twee objecten van een eigen klasse vergelijkt met ==, vergelijkt Python standaard alleen de geheugengebieden waar de objecten naar verwijzen, niet de data in de objecten zelf. Om dit gedrag te overschrijven, kan de klasse een speciale methode 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 de vorige hoofdstuk staat voor je klaar in script.py. De klasse heeft twee attributen, balance en number, en een methode withdraw(). Twee bankrekeningen met hetzelfde saldo zijn niet per se dezelfde rekening, maar een bankrekening heeft doorgaans een rekeningnummer, en twee rekeningen met hetzelfde rekeningnummer moeten als dezelfde worden beschouwd.

Deze oefening maakt deel uit van de cursus

Introductie tot objectgeoriënteerd programmeren in Python

Cursus bekijken

Oefeninstructies

  • Pas de __init__()-methode aan zodat deze een nieuw argument number accepteert en initialiseer een nieuw attribuut number.
  • Definieer een methode om te vergelijken of het attribuut number van twee objecten gelijk is.

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