1. Nauka
  2. /
  3. Kursy
  4. /
  5. Programowanie obiektowe w Pythonie

Connected

ćwiczenie

Sprawdzanie równości klas

W poprzednim ćwiczeniu zdefiniowano klasę BankAccount z atrybutem number, który był używany do porównań. Gdybyś jednak porównał obiekt 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)

Wykonanie acct == pn zwróci True, mimo że porównujemy numer telefonu z numerem konta bankowego.

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

Instrukcje

100 XP

Obie klasy – Phone i BankAccount – są już zdefiniowane. Uruchom kod w obecnej postaci, klikając przycisk "Uruchom kod", i sprawdź wynik.

  • Zmodyfikuj definicję klasy BankAccount tak, aby zwracała True tylko wtedy, gdy atrybut number jest taki sam i gdy type() obu przekazanych obiektów jest identyczny.

Uruchom kod ponownie i sprawdź wynik.