ПочатиПочніть безкоштовно

Перевантаження оператора рівності

Під час порівняння двох об'єктів користувацького класу за допомогою == Python типово порівнює лише ділянки пам'яті, на які посилаються об'єкти, а не дані всередині них. Щоб змінити цю поведінку, у класі можна реалізувати спеціальний метод, який приймає два аргументи — об'єкти для порівняння — і повертає True або False. Цей метод буде неявно викликано, коли два об'єкти порівнюються.

Клас BankAccount з попереднього розділу доступний у script.py. Він має два атрибути — 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)
    
Редагувати та запускати код