LoslegenKostenlos loslegen

Gleichheit überladen

Wenn du zwei Objekte einer benutzerdefinierten Klasse mit == vergleichst, vergleicht Python standardmäßig nur die Speicherbereiche, auf die die Objekte zeigen, nicht die in den Objekten enthaltenen Daten. Um dieses Verhalten zu überschreiben, kann die Klasse eine spezielle Methode implementieren, die zwei Argumente akzeptiert – die zu vergleichenden Objekte – und True oder False zurückgibt. Diese Methode wird implizit aufgerufen, wenn zwei Objekte verglichen werden.

Die Klasse BankAccount aus dem vorherigen Kapitel steht dir in script.py zur Verfügung. Sie hat die zwei Attribute balance und number sowie eine Methode withdraw(). Zwei Bankkonten mit dem gleichen Kontostand sind nicht unbedingt dasselbe Konto, aber ein Bankkonto hat üblicherweise eine Kontonummer, und zwei Konten mit derselben Kontonummer sollten als identisch betrachtet werden.

Diese Übung ist Teil des Kurses

Einführung in objektorientierte Programmierung in Python

Kurs anzeigen

Anleitung zur Übung

  • Ergänze die __init__()-Methode um ein neues Argument namens number und initialisiere ein neues Attribut number.
  • Definiere eine Methode, um zu vergleichen, ob das Attribut number zweier Objekte gleich ist.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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)
    
Code bearbeiten und ausführen