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 gebruikt werd voor vergelijking. Maar als je een BankAccount-object zou vergelijken met een object van een andere klasse die 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 vergelijk je een telefoonnummer met een bankrekeningnummer.

Het is een goede gewoonte om in de __eq__()-methode de klasse van de doorgegeven objecten te controleren, zodat de vergelijking logisch is.

Deze oefening maakt deel uit van de cursus

Introductie tot objectgeoriënteerd programmeren in Python

Cursus bekijken

Oefeninstructies

  • Pas de definitie van BankAccount aan zodat deze alleen True retourneert als het attribuut number hetzelfde is én het type() van beide doorgegeven objecten gelijk is.
  • Controleer of acct en pn gelijk zijn.

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 class type
  def __eq__(self, other):
    return (self.number == other.number) ____

acct = BankAccount(873555333)
pn = Phone(873555333)

# Check if the two objects are equal
print(____)
Code bewerken en uitvoeren