ComenzarEmpieza gratis

Comprobando la igualdad de clases

En el ejercicio anterior, definiste una clase BankAccount con un atributo number que se usaba para comparar. Pero si comparases un objeto BankAccount con un objeto de otra clase que también tenga un atributo number, podrías obtener resultados inesperados.

Por ejemplo, considera estas dos clases


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)

Ejecutar acct == pn devolverá True, aunque estemos comparando un número de teléfono con un número de cuenta bancaria.

Es una buena práctica comprobar la clase de los objetos que se pasan al método __eq__() para asegurarte de que la comparación tenga sentido.

Este ejercicio forma parte del curso

Programación orientada a objetos en Python

Ver curso

Instrucciones del ejercicio

Ambas clases, Phone y BankAccount, ya están definidas. Prueba a ejecutar el código tal cual usando el botón "Ejecutar código" y examina la salida.

  • Modifica la definición de BankAccount para que solo devuelva True si el atributo number es el mismo y el type() de ambos objetos que se le pasan es el mismo.

Vuelve a ejecutar el código y examina de nuevo la salida.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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)
Editar y ejecutar código