Zacznij terazZacznij za darmo

Sprawdzanie równości klas

W poprzednim ćwiczeniu zdefiniowano klasę BankAccount z atrybutem number, który służył do porównań. Jeśli jednak porównasz obiekt klasy BankAccount z obiektem innej klasy, która również ma atrybut number, możesz otrzymać nieoczekiwane wyniki.

Rozważ na przykład dwie klasy:


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)

Wywołanie acct == pn zwróci True, mimo że porównuje numer telefonu z numerem konta bankowego.

Dobrą praktyką jest sprawdzanie klasy obiektów przekazywanych do metody __eq__(), aby upewnić się, że porównanie ma sens.

To ćwiczenie jest częścią kursu

Wprowadzenie do programowania obiektowego w Pythonie

Zobacz kurs

Instrukcje do ćwiczenia

  • Zmodyfikuj definicję klasy BankAccount tak, aby zwracała True tylko wtedy, gdy atrybut number jest taki sam oraz type() obu przekazanych obiektów jest identyczny.
  • Sprawdź, czy acct i pn są sobie równe.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

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(____)
Edytuj i uruchom kod