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

Перегрузка оператора равенства

По умолчанию при сравнении двух объектов пользовательского класса с помощью == Python сравнивает не данные внутри объектов, а области памяти, на которые они ссылаются. Чтобы изменить это поведение, в классе можно реализовать специальный метод, который принимает два аргумента — сравниваемые объекты — и возвращает True или False. Этот метод будет неявно вызываться при сравнении объектов.

В файле script.py доступен класс BankAccount из предыдущей главы. У него есть два атрибута — balance и number — и метод withdraw(). Два банковских счёта с одинаковым балансом — это не обязательно один и тот же счёт. Однако у каждого счёта обычно есть номер, и два счёта с одинаковым номером следует считать одним и тем же счётом.

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

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

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

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

  • Измените метод __init__() так, чтобы он принимал новый аргумент number, и инициализируйте новый атрибут number.
  • Определите метод, который проверяет равенство атрибута number двух объектов.

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

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

class BankAccount:
  # Modify to initialize a number attribute
  def __init__(self, ____, balance=0):
    self.balance = balance
    ____
      
  def withdraw(self, amount):
    self.balance -= amount 
    
  # Define __eq__ that returns True if the number attributes are equal 
  def ____(____, ____):
    return ____.number == ____.____   

# Create accounts and compare them       
acct1 = BankAccount(123, 1000)
acct2 = BankAccount(123, 1000)
acct3 = BankAccount(456, 1000)
print(acct1 == acct2)
print(acct1 == acct3)
    
Редактировать и запускать код