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

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

В предыдущем упражнении вы определили класс 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

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

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

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

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

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

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(____)
Редактировать и запускать код