O problema Link para o cabeçalho
Para um objeto responder a <, <=, >, >=, == e !=, o Python espera que você implemente __lt__, __le__, __gt__, __ge__, __eq__ e __ne__. São seis métodos quase idênticos, tediosos de escrever e fáceis de deixar inconsistentes (um diz que a < b e outro discorda).
A dica Link para o cabeçalho
Duas peças cobrem tudo:
- O
dataclassjá gera o__eq__, comparando todos os campos do objeto. - O decorador
functools.total_orderingderiva__le__,__gt__e__ge__a partir do__eq__e de um método de ordem.
Ou seja, você escreve só o __lt__ e ganha o conjunto completo.
Código Link para o cabeçalho
| |
O isinstance evita comparar Money com tipos alheios: retornar NotImplemented deixa o outro lado tentar. Com isso, ordenar uma lista de preços com sorted() passa a funcionar de graça.
De onde veio o exemplo Link para o cabeçalho
A classe Money é a mesma do artigo “O Objeto Dinheiro”, vinda do capital_gains/money.py, uma refatoração de teste técnico onde explorei técnicas mais avançadas de Python.
Então é isso, pessoal!
Até a próxima!
{}’s