Sobrecarregamento da igualdade
Ao comparar dois objetos de uma classe personalizada usando ==
, o Python, por padrão, compara apenas as referências de objeto, não os dados contidos nos objetos. Para substituir esse comportamento, a classe pode implementar o método especial __eq__()
, que aceita dois argumentos - os objetos a serem comparados - e retorna True
ou False
. Esse método será chamado implicitamente quando dois objetos forem comparados.
A classe BankAccount
do capítulo anterior está disponível para você no painel de script. Ela tem um atributo, balance
, e um método withdraw()
. Duas contas bancárias com o mesmo saldo não são necessariamente a mesma conta, mas uma conta bancária geralmente tem um número de conta, e duas contas com o mesmo número de conta devem ser consideradas a mesma.
Este exercício faz parte do curso
Programação orientada a objetos em Python
Instruções de exercício
Try selecting the code in lines 1-7 and pressing the "Run code" button. Then try to create a few BankAccount
objects in the console and compare them.
- Modifique o método
__init__()
para aceitar um novo parâmetro,number
, e inicialize um novo atributonumber
. - Defina um método
__eq__()
que retorneTrue
se o atributonumber
de dois objetos for igual. - Examine as instruções de impressão e a saída no console.
Exercício interativo prático
Experimente este exercício preenchendo este código de exemplo.
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)