ComenzarEmpieza gratis

Sobrecarga de la igualdad

Al comparar dos objetos de una clase personalizada mediante ==, Python compara por defecto sólo las referencias a los objetos, no los datos que contienen. Para anular este comportamiento, la clase puede implementar el método especial __eq__(), que acepta dos argumentos --los objetos a comparar-- y devuelve True o False. Este método se llamará implícitamente cuando se comparen dos objetos.

La clase BankAccount del capítulo anterior está a tu disposición en el panel de script. Tiene un atributo, balance, y un método withdraw(). Dos cuentas bancarias con el mismo saldo no son necesariamente la misma cuenta, pero una cuenta bancaria suele tener un número de cuenta, y dos cuentas con el mismo número de cuenta deben considerarse la misma.

Este ejercicio forma parte del curso

Programación orientada a objetos en Python

Ver curso

Instrucciones de ejercicio

Prueba a seleccionar el código de las líneas 1-7 y a pulsar el botón "Ejecutar código". A continuación, intenta crear unos cuantos objetos BankAccount en la consola y compáralos._

  • Modifica el método __init__() para que acepte un nuevo parámetro - number - e inicialice un nuevo atributo number.
  • Define un método __eq__() que devuelva True si el atributo number de dos objetos es igual.
  • Examina las sentencias de impresión y la salida en la consola.

Ejercicio interactivo práctico

Pruebe este ejercicio completando este código de muestra.

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