LoslegenKostenlos starten

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

<Kurs>Objektorientierte Programmierung in Python</Kurs>
Kurs ansehen

Übungsanweisungen

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 praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

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