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
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 atributonumber
. - Define un método
__eq__()
que devuelvaTrue
si el atributonumber
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)