1. Nauka
  2. /
  3. Kursy
  4. /
  5. Wprowadzenie do programowania obiektowego w Pythonie

Connected

ćwiczenie

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.

Instrukcje

100 XP
  • 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.