IniziaInizia gratis

Verificare l'uguaglianza delle classi

Nel precedente esercizio hai definito una classe BankAccount con un attributo number usato per i confronti. Ma se confrontassi un oggetto BankAccount con un oggetto di un'altra classe che ha anch'esso un attributo number, potresti ottenere risultati inaspettati.

Per esempio, considera due classi


class Phone:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
          other.number

pn = Phone(873555333)

class BankAccount:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
           other.number

acct = BankAccount(873555333)

Eseguendo acct == pn otterrai True, anche se stai confrontando un numero di telefono con un numero di conto bancario.

È buona pratica controllare la classe degli oggetti passati al metodo __eq__() per assicurarsi che il confronto abbia senso.

Questo esercizio fa parte del corso

Programmazione orientata agli oggetti in Python

Visualizza il corso

Istruzioni dell'esercizio

Sia le classi Phone che BankAccount sono già state definite. Prova a eseguire il codice così com'è usando il pulsante "Esegui codice" ed esamina l'output.

  • Modifica la definizione di BankAccount in modo che restituisca True solo se l'attributo number è lo stesso e il type() di entrambi gli oggetti passati è lo stesso.

Esegui di nuovo il codice ed esamina l'output.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

class BankAccount:
    def __init__(self, number, balance=0):
        self.number, self.balance = number, balance
      
    def withdraw(self, amount):
        self.balance -= amount 

    # MODIFY to add a check for the type()
    def __eq__(self, other):
        return (self.number == other.number)

acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)
Modifica ed esegui il codice