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 de exercício
- Modifique o método
__init__()
para aceitar um novo argumento chamadonumber
e inicializar um novo atributonumber
. - Defina um método para comparar se o atributo
number
de dois objetos é igual.
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)