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

Código dando erro

(Código a partir da implementação def lt(self, outro): return self.saldo < outro.saldo))

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 and self._saldo == outro._saldo

def __lt__(self, outro):
    return self._saldo < outro._saldo

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

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

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

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

conta_do_alexandre = ContaCorrente(133) conta_do_alexandre.deposita(510)

contas = [conta_do_lucas, conta_do_ryu, conta_do_alexandre]

print(conta_do_lucas < conta_do_ryu)

print(conta_do_lucas > conta_do_ryu)

for conta in sorted(contas): print(conta)

no entanto

Traceback (most recent call last): File "C:\Users\Lucas\PycharmProjects\pythonProject\pythonCollections parte 1\Herança e Polimorfismo.py", line 243, in for conta in sorted(contas): TypeError: '<' not supported between instances of 'ContaCorrente' and 'ContaSalario'

desde já obrigado!

5 respostas

Olá, Lucas.

Em qual linha você compara a instância da ContaCorrente com a da ContaSalario?

contas = [conta_do_lucas, conta_do_ryu, conta_do_alexandre]

print(conta_do_lucas < conta_do_ryu)

print(conta_do_lucas > conta_do_ryu)

for conta in sorted(contas): print(conta)

ai dá aquele erro.

solução!

Lucas, verifique nas classes ContaSalario e ContaCorrente, se os dunder methods eq e lt estão declarados. Eles precisam estar em ambas as classes para que o sorted(contas) localizado no for funcione, pois para ordenar instâncias de diferentes classes, o interpretador do Python precisa encontrar alguma forma de comparar elas.

Lucas, editei e corrigi a minha resposta anterior. Agora que percebi onde a comparação entre as instâncias ocorre.

Obrigado Felipe!, funcionou!