LoslegenKostenlos loslegen

Gleichheit überladen

Wenn du zwei Objekte einer benutzerdefinierten Klasse mit == vergleichst, vergleicht Python standardmäßig nur die Objektreferenzen, nicht die in den Objekten enthaltenen Daten. Um dieses Verhalten zu überschreiben, kann die Klasse die spezielle Methode __eq__() implementieren. Sie akzeptiert zwei Argumente — die zu vergleichenden Objekte — und gibt True oder False zurück. Diese Methode wird implizit aufgerufen, wenn zwei Objekte verglichen werden.

Die Klasse BankAccount aus dem vorherigen Kapitel steht dir im Skriptbereich zur Verfügung. Sie hat ein Attribut balance und eine Methode withdraw(). Zwei Bankkonten mit demselben Kontostand sind nicht notwendigerweise dasselbe Konto, aber ein Bankkonto hat üblicherweise eine Kontonummer, und zwei Konten mit derselben Kontonummer sollten als gleich angesehen werden.

Diese Übung ist Teil des Kurses

Objektorientierte Programmierung in Python

Kurs anzeigen

Anleitung zur Übung

Versuche, den Code in den Zeilen 1–7 zu markieren und auf die Schaltfläche "Code ausführen" zu klicken. Erstelle dann ein paar BankAccount-Objekte in der Konsole und vergleiche sie.

  • Ändere die Methode __init__() so, dass sie einen neuen Parameter number akzeptiert, und initialisiere ein neues Attribut number.
  • Definiere eine Methode __eq__(), die True zurückgibt, wenn das Attribut number zweier Objekte gleich ist.
  • Sieh dir die print-Ausgaben und die Ausgaben in der Konsole an.

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