ÎncepețiÎncepe gratuit

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

Vezi cursul

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 atribut number.
  • Definește o metodă __eq__() care returnează True dacă atributul number al 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)
    
Editează și rulează codul