Проверка равенства классов
В предыдущем упражнении вы определили класс BankAccount с атрибутом number, который использовался для сравнения. Однако если сравнить объект BankAccount с объектом другого класса, у которого тоже есть атрибут number, можно получить неожиданный результат.
Рассмотрим два класса:
|
|
Выражение 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)