Gelijkheid van klassen controleren
In de vorige oefening definieerde je een BankAccount-klasse met een attribuut number dat werd gebruikt voor vergelijking. Maar als je een BankAccount-object vergelijkt met een object van een andere klasse dat ook een attribuut number heeft, kun je onverwachte resultaten krijgen.
Neem bijvoorbeeld twee klassen
|
|
Als je acct == pn uitvoert, krijg je True, ook al vergelijken we een telefoonnummer met een bankrekeningnummer.
Het is goed gebruik om de klasse te controleren van de objecten die aan de methode __eq__() worden doorgegeven, zodat de vergelijking logisch is.
Deze oefening maakt deel uit van de cursus
Objectgeoriënteerd programmeren in Python
Oefeninstructies
Beide klassen, Phone en BankAccount, zijn gedefinieerd. Probeer de code eerst te draaien zoals hij is met de knop "Code uitvoeren" en bekijk de output.
- Pas de definitie van
BankAccountaan zodat deze alleenTrueretourneert als het attribuutnumbergelijk is én hettype()van beide objecten die worden vergeleken hetzelfde is.
Draai de code opnieuw en bekijk de output.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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 type()
def __eq__(self, other):
return (self.number == other.number)
acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)