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
Anleitung zur Übung
- Ergänze die
__init__()-Methode um ein neues Argument namensnumberund initialisiere ein neues Attributnumber. - Definiere eine Methode, um zu vergleichen, ob das Attribut
numberzweier 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)