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
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 Parameternumberakzeptiert, und initialisiere ein neues Attributnumber. - Definiere eine Methode
__eq__(), dieTruezurückgibt, wenn das Attributnumberzweier 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)