1
resposta

Corte no video - Aula de __eq__

class ContaSalario:
    def __init__(self, codigo):
        self._codigo = codigo
        self._saldo = 0

    def __eq__(self, outro):
        if type(outro) != ContaSalario:
            return False
        return self._codigo == outro._codigo

class ContaMultiploSalario(ContaSalario):
    pass

Antes do corte no vídeo, o professor faz uma comparação de duas variáveis:

conta1 = ContaSalario(37)
conta2 = ContaMultiploSalário(37)
conta1 == conta2

Ele fala que o resultado será False, porém, vemos que o resultado exibido é True.

O video é cortado e o código é alterado para:

conta1 = ContaSalario(37)
conta2 = ContaCorrente(37)
conta1 == conta2

E aí, sim, temos o resultado esperado pelo professor (False).

Porém não há nenhuma explicação.

1 resposta

Oi Nalyton, tudo bem?

Na aula o professor comente um equívoco. O correto é para que retorne True no trecho onde ele compara:

conta1 = ContaSalario(37)
conta2 = ContaMultiploSalário(37)
conta1 == conta2

Pois, ContaMultiploSalário herda de ContaSalario, ou seja, ContaMultiploSalário é uma ContaSalario. E se a ContaMultiploSalário possui o mesmo código da ContaSalario, tudo bem, elas são iguais.

Já no trecho que ele compara:

conta1 = ContaSalario(37)
conta2 = ContaCorrente(37)
conta1 == conta2

Dará False, pois ContaCorrente não é uma ContaSalario, o que elas tem em comum é apenas o código. Caso ContaCorrente herdasse de ContaSalario e ambas possuíssem códigos iguais, elas seriam iguais.

Em suma: nesse código se uma classe herda de ContaSalario ou é uma ContaSalario e possui o mesmo código, elas serão iguais. Em caso contrário, não serão iguais, retornará False.

Qualquer dúvida é só falar. Abraços e bons estudos!