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

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

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

Клас BankAccount з попереднього розділу доступний у вікні сценарію. Він має один атрибут balance і метод withdraw(). Два банківські рахунки з однаковим балансом — це не обов'язково один і той самий рахунок, але банківський рахунок зазвичай має номер рахунку, і два рахунки з однаковим номером рахунку слід вважати однаковими.

Ця вправа є частиною курсу

Об'єктноорієнтоване програмування в Python

Переглянути курс

Інструкції до вправи

Спробуйте виділити код у рядках 1–7 і натиснути кнопку "Run code". Потім створіть кілька об'єктів BankAccount у консолі та порівняйте їх.

  • Змініть метод __init__(), щоб він приймав новий параметр number і ініціалізував новий атрибут number.
  • Визначте метод __eq__(), який повертає True, якщо атрибути number у двох об'єктів рівні.
  • Перегляньте оператори print та вивід у консолі.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

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