Supraîncărcarea operatorului de egalitate
Când compari două obiecte ale unei clase personalizate folosind ==, Python compară implicit doar zonele de memorie către care pointează obiectele, nu datele conținute în acestea. Pentru a modifica acest comportament, clasa poate implementa o metodă specială, care acceptă două argumente – obiectele de comparat – și returnează True sau False. Această metodă va fi apelată implicit ori de câte ori sunt comparate două obiecte.
Clasa BankAccount din capitolul anterior este disponibilă în script.py. Are două atribute, balance și number, și o metodă withdraw(). Două conturi bancare cu același sold nu sunt neapărat același cont, însă un cont bancar are de obicei un număr de cont, iar două conturi cu același număr ar trebui considerate identice.
Acest exercițiu face parte din cursul
Introducere în Programarea Orientată pe Obiecte în Python
Instrucțiuni pentru exercițiu
- Modifică metoda
__init__()astfel încât să accepte un nou argument numitnumberși inițializează un nou atributnumber. - Definește o metodă care să verifice dacă atributul
numberal două obiecte este egal.
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)