LoslegenKostenlos starten

Gleichheit der Klassen prüfen

In der vorherigen Aufgabe hast du eine Klasse BankAccount 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, kann es 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 eine Telefonnummer mit einer Kontonummer verglichen wird.

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>Einführung in objektorientierte Programmierung in Python</Kurs>
Kurs ansehen

Übungsanweisungen

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

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 class type
  def __eq__(self, other):
    return (self.number == other.number) ____

acct = BankAccount(873555333)
pn = Phone(873555333)

# Check if the two objects are equal
print(____)
Code bearbeiten und ausführen