Sobrecarregamento da igualdade
Ao comparar dois objetos de uma classe personalizada usando ==, o Python, por padrão, compara apenas os blocos de memória para os quais os objetos apontam, e não os dados contidos nos objetos. Para substituir esse comportamento, a classe pode implementar um método especial, 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 site script.py. Ele tem dois atributos, balance e number, 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
Introdução à programação orientada a objetos em Python
Instruções do exercício
- Modifique o método
__init__()para aceitar um novo argumento chamadonumbere inicializar um novo atributonumber. - Defina um método para comparar se o atributo
numberde dois objetos é igual.
Exercício interativo prático
Experimente este exercício completando 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)