Überlastung der Gleichheit
Wenn du zwei Objekte einer benutzerdefinierten Klasse mit ==
vergleichst, vergleicht Python standardmäßig nur die Speicherchunks, auf die die Objekte zeigen, und nicht die in den Objekten enthaltenen Daten. Um dieses Verhalten außer Kraft zu setzen, kann die Klasse eine spezielle Methode implementieren, die zwei Argumente, die zu vergleichenden Objekte, entgegennimmt 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 script.py
zur Verfügung. Sie hat zwei Attribute, balance
und number
, und eine Methode withdraw()
. 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
Einführung in die objektorientierte Programmierung in Python
Anleitung zur Übung
- Ändere die Methode
__init__()
, um ein neues Argument namensnumber
zu akzeptieren und ein neues Attributnumber
zu initialisieren. - Definiere eine Methode, um zu vergleichen, ob das
number
Attribut zweier Objekte gleich ist.
Interaktive Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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)