IniziaInizia gratis

Overloading dell'uguaglianza

Quando confronti due oggetti di una classe personalizzata usando ==, Python per impostazione predefinita confronta solo i blocchi di memoria a cui puntano gli oggetti, non i dati contenuti negli oggetti. Per modificare questo comportamento, la classe può implementare un metodo speciale, 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 del capitolo precedente è disponibile in script.py. Ha due attributi, balance e number, e un metodo withdraw(). Due conti bancari con lo stesso saldo non sono necessariamente lo stesso conto, ma un conto bancario ha di solito un numero di conto, e due conti con lo stesso numero di conto dovrebbero essere considerati lo stesso.

Questo esercizio fa parte del corso

Introduzione alla programmazione orientata agli oggetti in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Modifica il metodo __init__() per accettare un nuovo argomento chiamato number e inizializzare un nuovo attributo number.
  • Definisci un metodo per confrontare se l'attributo number di due oggetti è uguale.

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