PythonPOOintermediario

__eq__ e __lt__

Ao trabalhar com listas de objetos, frequentemente precisamos compará-los para verificar duplicatas ou ordená-los. Métodos como __eq__ e __lt__ permitem que você defina critérios de comparação personalizados, tornando operadores como ==, < e funções como sorted() funcionem diretamente com seus objetos. Isso é comum em sistemas de e-commerce, por exemplo, para comparar produtos pelo nome ou ordená-los por preço.

O PROBLEMA

Produto com __eq__ (nome) e __lt__ (preco) para ordenação.

EXEMPLO

sorted([Produto("Feijão",6), Produto("Arroz",8)])

SOBRE O CONCEITO

__eq__ define o comportamento do operador ==. Quando você chama produto1 == produto2, o Python executa produto1.__eq__(produto2). É essencial incluir isinstance no método para verificar se o outro objeto é da mesma classe, evitando comparações com tipos incompatíveis (ex.: Produto vs. int). Sem essa verificação, seu código pode lançar erros ou comparar atributos inexistentes. Já __lt__ define < e é usado por sorted() para ordenar listas de objetos. No exercício, __eq__ compara apenas pelo atributo nome, enquanto __lt__ compara pelo preco. Um erro comum é implementar __eq__ sem isinstance, o que pode comparar um Produto com uma string e tentar acessar self.nome em algo que não tem o atributo, resultando em AttributeError.

RESOLUÇÃO

Mais exercícios de POO

PYPOI2I · IntermediárioHerança simplesPYPOI1I · IntermediárioProperty e setterPYPOI5I · IntermediárioClasse abstrataPYPOO7B · BásicoMétodo estático
Ver todos os exercícios de Python