Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Total ordering retornando None

Boa tarde!

Estou utizando o PyCharm para o curso. Nos dois últimos exemplos de comparação (conta_do_guilherme <= conta_do_guilherme e conta_do_guilherme == conta_do_guilherme) estou tendo como retorno 'None'. O que está errado no meu código?

from functools import total_ordering


@total_ordering
class ContaSalario:

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

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

    def __lt__(self, outro):
        if self._saldo != outro._saldo:
            return self._saldo < outro._saldo
        return self._codigo < outro._codigo

    def deposita(self, valor):
        self._saldo += valor

    def __str__(self):
        return "[>>Codigo {} Saldo {}<<]".format(self._codigo, self._saldo)


conta_do_guilherme = ContaSalario(17)
conta_do_guilherme.deposita(500)

conta_da_daniela = ContaSalario(3)
conta_da_daniela.deposita(1000)

conta_do_paulo = ContaSalario(133)
conta_do_paulo.deposita(500)

print(conta_do_guilherme <= conta_da_daniela)
print(conta_do_guilherme <= conta_do_paulo)
print(conta_do_guilherme < conta_do_guilherme)
print(conta_do_guilherme <= conta_do_guilherme)
print(conta_do_guilherme == conta_do_guilherme)

As saídas: True True False None None

Obrigado desde já.

2 respostas
solução!

O problema está na implementação do método __eq__ na classe ContaSalario. Quando a condição para verificar se o tipo de outro não é igual a ContaSalario é satisfeita, o método não retorna nada (None). Para corrigir isso, você deve adicionar um retorno indicando a igualdade quando os tipos são diferentes. Aqui está uma correção:

@total_ordering
class ContaSalario:

    # ... (código anterior)

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

# Restante do código permanece inalterado

Agora, o método __eq__ retorna False quando os tipos são diferentes e verifica a igualdade dos códigos e saldos quando os tipos são iguais. Isso deve resolver o problema que você estava enfrentando com retornos None ao usar operadores de comparação.

Entendi, obrigado Carlos.