Aan de slagBegin gratis

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

Bekijk cursus

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.

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan 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