Přetížení operátoru rovnosti
Při porovnávání dvou objektů vlastní třídy pomocí == Python ve výchozím nastavení porovnává pouze reference na objekty, nikoli data v nich uložená. Toto chování lze změnit tak, že třída implementuje speciální metodu __eq__(), která přijímá dva argumenty – porovnávané objekty – a vrací True nebo False. Tato metoda se zavolá automaticky při porovnání dvou objektů.
V editoru je k dispozici třída BankAccount z předchozí kapitoly. Má jeden atribut balance a metodu withdraw(). Dva bankovní účty se stejným zůstatkem nemusí být nutně stejný účet – účet ale obvykle má číslo, a dva účty se stejným číslem by měly být považovány za totožné.
Toto cvičení je součástí kurzu
Object-Oriented Programming in Python
Pokyny k cvičení
Zkus označit kód na řádcích 1–7 a stisknout tlačítko "Run code". Poté vytvoř v konzoli několik objektů BankAccount a porovnej je.
- Uprav metodu
__init__()tak, aby přijímala nový parametrnumber, a inicializuj nový atributnumber. - Definuj metodu
__eq__(), která vrátíTrue, pokud se atributnumberdvou objektů shoduje. - Prohlédni si příkazy
printa výstup v konzoli.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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)