Перевантаження оператора рівності
Під час порівняння двох об'єктів користувацького класу за допомогою == 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)