Por padrão os tipos primitivos (inteiro, string ...) no Python já têm implementado nativamente suas próprias maneiras de se comparar e no caso do inteiro e da string o que se compara são seus valores. Porém, ao tentar comparar objetos de classes criadas em nosso código utilizando o operador == ele não funciona como queremos. Isso porque o Python não sabe como deve comparar os objetos de tipo que declaramos no código quando utilizamos o operador == .
Suponha que temos em nosso código duas instâncias da classe Produto e queremos verificar se elas são iguais.
Exemplo:
Ao usarmos == o retorno será False pois ele irá checar se as varáveis em comparação apontam para o mesmo objeto na memória.
Rich comparison
No Python temos como implementar algo similar ao equals() do Java, utilizando rich comparison podemos definir os seguintes métodos de comparação em uma classe:
-
__eq__(), chamado pelo operador== -
__ne__(), chamado pelo operador!= -
__gt__(), chamado pelo operador> -
__lt__(), chamado pelo operador< -
__ge__(), chamado pelo operador>= -
__le__(), chamado pelo operador<=
Para resolvermos nosso problema de comparação iremos utilizar o método __eq__(). Vamos utilizar a propriedade 'nome' da classe para fazer a comparação.
Exemplo:
Agora ao usarmos == o retorno será True e não teremos problemas com comparações entre objetos que nós mesmos implementamos no Python!


Top comments (4)
Adoreeei! Ainda não cheguei nessa parte, mas já vou salvar pra aprender :)
Muito obrigado Sarah!
cara parabéns pelo artigo, achei muito bom e acredito que alcançou o objetivo de informar nós iniciantes em python como a linguagem funciona.
Continue com o excelente trabalho por favor! abraços.
Obrigado Rafa!