Przeciążanie operatora równości
Gdy porównujesz dwa obiekty klasy niestandardowej za pomocą ==, Python domyślnie porównuje jedynie adresy w pamięci, pod którymi przechowywane są te obiekty – nie zaś dane, które zawierają. Aby zmienić to zachowanie, klasa może implementować specjalną metodę, która przyjmuje dwa argumenty (porównywane obiekty) i zwraca True lub False. Metoda ta będzie wywoływana niejawnie przy każdym porównaniu dwóch obiektów.
Klasa BankAccount z poprzedniego rozdziału jest już dostępna w pliku script.py. Ma dwa atrybuty – balance i number – oraz metodę withdraw(). Dwa konta bankowe z tym samym saldem niekoniecznie są tym samym kontem, ale każde konto bankowe zazwyczaj posiada numer konta. Dwa konta o tym samym numerze powinny być uznawane za identyczne.
To ćwiczenie jest częścią kursu
Wprowadzenie do programowania obiektowego w Pythonie
Instrukcje do ćwiczenia
- Zmodyfikuj metodę
__init__(), tak aby przyjmowała nowy argument o nazwienumber, i zainicjalizuj nowy atrybutnumber. - Zdefiniuj metodę, która sprawdza, czy atrybut
numberdwóch obiektów jest równy.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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)