Ü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
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 Attributnumber
zu initialisieren. - Definiere eine
__eq__()
Methode, dieTrue
zurückgibt, wenn dasnumber
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)