Supraîncărcarea egalității
Când compari două obiecte ale unei clase personalizate folosind ==, Python compară implicit doar referințele obiectelor, nu datele conținute în acestea. Pentru a modifica acest comportament, clasa poate implementa metoda specială __eq__(), care acceptă două argumente -- obiectele de comparat -- și returnează True sau False. Această metodă va fi apelată implicit atunci când două obiecte sunt comparate.
Clasa BankAccount din capitolul anterior este disponibilă în panoul de cod. Are un atribut, balance, și o metodă withdraw(). Două conturi bancare cu același sold nu sunt neapărat același cont, dar un cont bancar are de obicei un număr de cont, iar două conturi cu același număr de cont ar trebui considerate identice.
Acest exercițiu face parte din cursul
Programare orientată pe obiecte în Python
Instrucțiuni pentru exercițiu
Încearcă să selectezi codul din liniile 1-7 și să apeși butonul „Run code". Apoi creează câteva obiecte BankAccount în consolă și compară-le.
- Modifică metoda
__init__()pentru a accepta un nou parametru -number- și inițializează un nou atributnumber. - Definește o metodă
__eq__()care returneazăTruedacă atributulnumberal celor două obiecte este egal. - Examinează instrucțiunile print și rezultatele din consolă.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)