LoslegenKostenlos loslegen

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

Einführung in objektorientierte Programmierung in Python

Kurs anzeigen

Anleitung zur Übung

  • Ä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 Ü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 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