IniziaInizia gratis

Controllare l'uguaglianza di classe

Nel precedente esercizio hai definito una classe BankAccount con un attributo number usato per i confronti. Ma se confronti 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 assicurarti che il confronto abbia senso.

Questo esercizio fa parte del corso

Introduzione alla programmazione orientata agli oggetti in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Modifica la definizione di BankAccount affinché restituisca True solo se l'attributo number è lo stesso e il type() di entrambi gli oggetti passati è lo stesso.
  • Verifica se acct e pn sono uguali.

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 class type
  def __eq__(self, other):
    return (self.number == other.number) ____

acct = BankAccount(873555333)
pn = Phone(873555333)

# Check if the two objects are equal
print(____)
Modifica ed esegui il codice