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
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 attributonumber. - Definisci un metodo
__eq__()che restituiscaTruese l'attributonumberdi 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)