Aan de slagGa gratis aan de slag

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


class Phone:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
          other.number

pn = Phone(873555333)

class BankAccount:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
           other.number

acct = BankAccount(873555333)

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

Cursus bekijken

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 BankAccount aan zodat deze alleen True retourneert als het attribuut number gelijk is én het type() 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)
Code bewerken en uitvoeren