LoslegenKostenlos loslegen

Gleichheit der Klassen prüfen

In der vorherigen Übung hast du eine BankAccount-Klasse mit einem Attribut number definiert, das für Vergleiche verwendet wurde. Wenn du jedoch ein BankAccount-Objekt mit einem Objekt einer anderen Klasse vergleichst, das ebenfalls ein Attribut number hat, kannst du zu unerwarteten Ergebnissen kommen.

Betrachte zum Beispiel zwei Klassen


class Phone:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
          other.number

pn = Phone(873555333)

class BankAccount:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
           other.number

acct = BankAccount(873555333)

Das Ausführen von acct == pn gibt True zurück, obwohl wir eine Telefonnummer mit einer Bankkontonummer vergleichen.

Es ist gute Praxis, in der Methode __eq__() die Klasse der übergebenen Objekte zu prüfen, um sicherzustellen, dass der Vergleich sinnvoll ist.

Diese Übung ist Teil des Kurses

Objektorientierte Programmierung in Python

Kurs anzeigen

Anleitung zur Übung

Beide Klassen, Phone und BankAccount, sind definiert. Führe den Code zunächst unverändert mit dem Button "Code ausführen" aus und schau dir die Ausgabe an.

  • Ändere die Definition von BankAccount so, dass True nur zurückgegeben wird, wenn das Attribut number gleich ist und der type() beider übergebener Objekte derselbe ist.

Führe den Code erneut aus und prüfe die Ausgabe.

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

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)
Code bearbeiten und ausführen