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)
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!
Adoreeei! Ainda não cheguei nessa parte, mas já vou salvar pra aprender :)
Muito obrigado Sarah!