DEV Community

welingtoncassis
welingtoncassis

Posted on • Updated 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
 
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!

Collapse
 
sarytics 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!