НачатьНачать бесплатно

Проверка равенства классов

В предыдущем упражнении вы определили класс BankAccount с атрибутом number, который использовался для сравнения. Однако если сравнить объект BankAccount с объектом другого класса, у которого тоже есть атрибут number, можно получить неожиданный результат.

Рассмотрим два класса:


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)

Выражение acct == pn вернёт True, хотя мы сравниваем номер телефона с номером банковского счёта.

Хорошей практикой считается проверка классов объектов, передаваемых в метод __eq__(), — это позволяет убедиться, что сравнение имеет смысл.

Это упражнение является частью курса

Объектно-ориентированное программирование на Python

Посмотреть курс

Инструкции к упражнению

Классы Phone и BankAccount уже определены. Запустите код в текущем виде с помощью кнопки «Запустить код» и изучите вывод.

  • Измените определение класса BankAccount так, чтобы метод возвращал True только в том случае, если атрибут number совпадает и функция type() возвращает одинаковый тип для обоих объектов.

Запустите код снова и изучите вывод.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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

acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)
Редактировать и запускать код