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?
Réponses
Trop de publicités?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)
.
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.
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.