Introdução:
Defini uma classe com o "__lt__
" com o seguinte retorno:
return self._saldo < outro._saldo
criei 3 contas, cujos "prints" retornam isso
[>>conta 1 Saldo 666<<]
[>>conta 2 Saldo 111<<]
[>>conta 3 Saldo 444<<]
Fazendo isso:
print(a2 < a3)
print(a2 > a3)
Recebo isso:
True
False
A comparação com "<" devolveu corretamente
True
E, se o ">" é implementado como o inverso do reultado do "<", então o retorno
False
além de ser o correto , era o esperado.
PORÉM...
Problema:
Fazendo
a2.deposita(333)
eu igualo os saldos das contas a2 e a3.
Então, fazendo
print(a2 < a3)
eu recebo o resultado
False
OK!
E, repetindo o que coloquei acima, se o ">" é implementado como o inverso do resultado do "<", então o retorno esperado de
print(a2 > a3)
seria
True
Só que não é!!!
O resultado de
print(a2 > a3)
é
False
que é o resultado correto (matematicamente), porém, NÃO é o esperado, como colocado acima.
Como assim?
Qual é a explicação???
Códigos para testes
A classe é
class ContaSalario:
def __init__(self, codigo):
self._codigo = codigo
self._saldo = 0
def __lt__(self, outro):
return self._saldo < outro._saldo
def deposita(self, valor):
self._saldo += valor
def __str__(self):
return "[>>conta {} Saldo {}<<]".format(self._codigo, self._saldo)
e as contas foram criadas assim
a1 = ContaSalario(1)
a1.deposita(666)
a2 = ContaSalario(2)
a2.deposita(111)
a3 = ContaSalario(3)
a3.deposita(444)
os prints iniciais foram feitos assim
print(a1)
print(a2)
print(a3)