DEV Community

welingtoncassis
welingtoncassis

Posted on • Edited on

Comparando objetos no Python

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:

Classe Produto

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:

Classe Produto com __eq__()

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)

Collapse
 
sarahsantana profile image
sarah santana

Adoreeei! Ainda não cheguei nessa parte, mas já vou salvar pra aprender :)

Collapse
 
welingtoncassis profile image
welingtoncassis

Muito obrigado Sarah!

Collapse
 
rafaelassumpcao profile image
Rafael A

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.

Collapse
 
welingtoncassis profile image
welingtoncassis

Obrigado Rafa!