Erste SchritteKostenlos loslegen

Überlastung der Gleichheit

Wenn du zwei Objekte einer benutzerdefinierten Klasse mit == vergleichst, vergleicht Python standardmäßig nur die Objektreferenzen und nicht die in den Objekten enthaltenen Daten. Um dieses Verhalten außer Kraft zu setzen, kann die Klasse die spezielle Methode __eq__() implementieren, die zwei Argumente - die zu vergleichenden Objekte - annimmt 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 im Skriptfenster zur Verfügung. Sie hat ein Attribut, balance, und eine withdraw() Methode. Zwei Bankkonten mit demselben Saldo sind nicht unbedingt dasselbe Konto, aber ein Bankkonto hat normalerweise eine Kontonummer, und zwei Konten mit derselben Kontonummer sollten als dasselbe 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 auszuwählen und drücke auf die Schaltfläche "Code ausführen". Dann versuche, ein paar BankAccount Objekte in der Konsole zu erstellen und sie zu vergleichen.

  • Ändere die Methode __init__(), um einen neuen Parameter - number - zu akzeptieren und ein neues Attribut number zu initialisieren.
  • Definiere eine __eq__() Methode, die True zurückgibt, wenn das number Attribut zweier Objekte gleich ist.
  • Untersuche die Druckanweisungen und die Ausgabe in der Konsole.

Interaktive Übung zum Anfassen

Probieren Sie diese Übung aus, indem Sie diesen Beispielcode ausführen.

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)
    
Bearbeiten und Ausführen von Code