37 votes

Pourquoi Python a-t-il une méthode d'opérateur __ne__ au lieu de simplement __eq__?

La réponse ici donne une référence à des cas où vous voudriez que __ne__ renvoie autre chose que l'inverse logique de __eq__ , mais je ne peux pas imaginer un tel cas. Des exemples?

29voto

Weeble Points 6248

Certaines bibliothèques font des choses fantaisistes et ne renvoient pas un booléen de ces opérations. Par exemple, avec numpy:

 >>> import numpy as np
>>> np.array([1,2,5,4,3,4,5,4,4])==4
array([False, False, False,  True, False,  True, False,  True,  True], dtype=bool)
>>> np.array([1,2,5,4,3,4,5,4,4])!=4
array([ True,  True,  True, False,  True, False,  True, False, False], dtype=bool)
 

Lorsque vous comparez un tableau à une valeur unique ou à un autre tableau, vous obtenez un tableau de bools des résultats de la comparaison des éléments correspondants. Vous ne pourriez pas faire cela si x!=y était simplement équivalent à not (x==y) .

29voto

Jochen Ritzel Points 42916

SQLAlchemy est un excellent exemple. Pour les non-initiés, SQLAlchemy est un ORM et utilise l'expression Python pour générer des instructions SQL. Dans une expression telle que

 meta.Session.query(model.Theme).filter(model.Theme.id == model.Vote.post_id)
 

le model.Theme.id == model.VoteWarn.post_id ne renvoie pas un booléen, mais un objet qui produit finalement une requête SQL comme WHERE theme.id = vote.post_id . L'inverse produirait quelque chose comme WHERE theme.id <> vote.post_id donc les deux méthodes doivent être définies.

8voto

Ben Points 23834

Plus généralement, dans de nombreux systèmes logiques valorisés , equals et not equals ne sont pas nécessairement des inverses exacts l'un de l'autre.

L'exemple évident est SQL où True == True , False == False et Null != Null . Bien que je ne sache pas s'il existe des exemples spécifiques de Python, je peux imaginer qu'il soit implémenté par endroits.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X