IniziaInizia gratis

Sovraccaricare l'uguaglianza

Quando confronti due oggetti di una classe personalizzata usando ==, Python per impostazione predefinita confronta solo i riferimenti agli oggetti, non i dati contenuti negli oggetti. Per modificare questo comportamento, la classe può implementare lo speciale metodo __eq__(), che accetta due argomenti — gli oggetti da confrontare — e restituisce True o False. Questo metodo verrà chiamato implicitamente quando due oggetti vengono confrontati.

La classe BankAccount dal capitolo precedente è disponibile nel riquadro dello script. Ha un attributo, balance, e un metodo withdraw(). Due conti bancari con lo stesso saldo non sono necessariamente lo stesso conto, ma di solito un conto bancario ha un numero di conto, e due conti con lo stesso numero di conto dovrebbero essere considerati lo stesso.

Questo esercizio fa parte del corso

Programmazione orientata agli oggetti in Python

Visualizza il corso

Istruzioni dell'esercizio

Prova a selezionare il codice nelle righe 1-7 e a premere il pulsante "Esegui codice". Poi prova a creare alcuni oggetti BankAccount nella console e a confrontarli.

  • Modifica il metodo __init__() per accettare un nuovo parametro, number, e inizializzare un nuovo attributo number.
  • Definisci un metodo __eq__() che restituisca True se l'attributo number di due oggetti è uguale.
  • Esamina le istruzioni di stampa e l'output nella console.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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)
    
Modifica ed esegui il codice