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
Oefeninstructies
- Pas de
__init__()-methode aan zodat deze een nieuw argumentnumberaccepteert en initialiseer een nieuw attribuutnumber. - Definieer een methode om te vergelijken of het attribuut
numbervan 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)