getitem - python__add__
¿Por qué Python tiene un método de operador__ne__ en lugar de solo__eq__? (3)
La respuesta here da una referencia manual de los casos en los que desearía que __ne__
devolviera algo distinto a la inversa lógica de __eq__
, pero no puedo imaginar ningún caso. ¿Algún ejemplo?
Algunas bibliotecas hacen cosas extravagantes y no devuelven un bool de estas operaciones. Por ejemplo, con 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)
Cuando compara una matriz con un solo valor u otra matriz, obtiene una matriz de bools de los resultados de la comparación de los elementos correspondientes. No podría hacer esto si x!=y
fuera simplemente equivalente a not (x==y)
.
De manera más general, en muchos sistemas lógicos valiosos , los equals
y not equals
no son necesariamente inversos exactos entre sí.
El ejemplo obvio es SQL donde True == True
, False == False
and Null != Null
. Aunque no sé si hay ejemplos específicos de Python, puedo imaginar que se implemente en algunos lugares.
SQLAlchemy es un gran ejemplo. Para los no iniciados, SQLAlchemy es un ORM y usa la expresión de Python para generar declaraciones de SQL. En una expresión como
meta.Session.query(model.Theme).filter(model.Theme.id == model.Vote.post_id)
the model.Theme.id == model.VoteWarn.post_id
no devuelve un booleano, sino un objeto que finalmente produce una consulta SQL como WHERE theme.id = vote.post_id
. Lo inverso produciría algo así como WHERE theme.id <> vote.post_id
por lo que ambos métodos deben definirse.