ComeçarComece de graça

Verificação da igualdade de classes

No exercício anterior, você definiu uma classe BankAccount com um atributo number que foi usado para comparação. Mas se você comparar um objeto BankAccount com um objeto de outra classe que também tenha um atributo number, poderá obter resultados inesperados.

Por exemplo, considere duas classes



class Phone:

  def __init__(self, number):

     self.number = number



  def __eq__(self, other):

    retornar self.número == \

                    other.number




pn = Phone(873555333)

class BankAccount:

  def __init__(self, number):

     self.number = number



  def __eq__(self, other):

    retornar self.número == \

                      other.number




acct = BankAccount(873555333)

A execução de acct == pn retornará True, mesmo que estejamos comparando um número de telefone com um número de conta bancária.

É uma boa prática verificar a classe dos objetos passados para o método __eq__() para garantir que a comparação faça sentido.

Este exercício faz parte do curso

Programação orientada a objetos em Python

Ver curso

Instruções do exercício

As classes Phone e BankAccount foram definidas. Tenta rodar o código como está usando o botão “Rodar código” e dá uma olhada no resultado.

  • Modifique a definição de BankAccount para apenas retornar True se o atributo number for o mesmo e o type() de ambos os objetos passados para ele for o mesmo.

Execute o código e examine a saída novamente.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

class BankAccount:
    def __init__(self, number, balance=0):
        self.number, self.balance = number, balance
      
    def withdraw(self, amount):
        self.balance -= amount 

    # MODIFY to add a check for the type()
    def __eq__(self, other):
        return (self.number == other.number)

acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)
Editar e executar o código