ComeçarComece gratuitamente

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

Ver Curso

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 atributo number.
  • Defina um método __eq__() que retorne True se o atributo number 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)
    
Editar e executar código