Inizia subitoInizia 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 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 interattivo pratico

Prova questo esercizio completando questo 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