Überprüfung der Klassengleichheit
In der vorherigen Übung hast du eine Klasse BankAccount
mit einem number
Attribut definiert, das zum Vergleich verwendet wurde. Wenn du aber ein BankAccount
Objekt mit einem Objekt einer anderen Klasse vergleichst, das auch ein number
Attribut hat, könntest du zu unerwarteten Ergebnissen kommen.
Betrachten wir zum Beispiel zwei Klassen
|
|
Wenn du acct == pn
aufrufst, wird True
zurückgegeben, obwohl wir eine Telefonnummer mit einer Kontonummer vergleichen.
Es empfiehlt sich, die Klasse der Objekte, die an die Methode __eq__()
übergeben werden, zu überprüfen, um sicherzustellen, dass der Vergleich sinnvoll ist.
Diese Übung ist Teil des Kurses
Objektorientierte Programmierung in Python
Anleitung zur Übung
Sowohl die Phone
als auch die BankAccount
Klassen sind definiert worden. Versuche, den Code so auszuführen, wie er ist, indem du auf die Schaltfläche "Code ausführen" klickst und prüfe die Ausgabe.
- Ändere die Definition von
BankAccount
so, dass sie nurTrue
zurückgibt, wenn das Attributnumber
gleich ist und dietype()
der beiden übergebenen Objekte gleich ist.
Führe den Code aus und prüfe die Ausgabe erneut.
Interaktive Übung zum Anfassen
Probieren Sie diese Übung aus, indem Sie diesen Beispielcode ausführen.
class BankAccount:
def __init__(self, number, balance=0):
self.number, self.balance = number, balance
def withdraw(self, amount):
self.balance -= amount
# MODIFY to add a check for the type()
def __eq__(self, other):
return (self.number == other.number)
acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)