为什么Python有一个__ne__操作符方法而不是__eq__?

这里的答案提供了一个handwving的参考案例,你希望__ne__返回除__eq__的逻辑逆之外的东西,但我无法想象任何这样的情况。 任何例子?

SQLAlchemy是一个很好的例子。 对于外行,SQLAlchemy是一个ORM并使用Pythonexpression式来生成SQL语句。 在一个expression式如

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

model.Theme.id == model.VoteWarn.post_id不返回一个布尔值,而是一个最终产生一个SQL查询的对象,如WHERE theme.id = vote.post_idWHERE theme.id <> vote.post_id会产生像WHERE theme.id <> vote.post_id这样的两个方法需要定义。

一些图书馆喜欢花哨的东西,而不是从这些行动中回报。 例如,用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) 

当你比较一个数组到单个值或另一个数组时,你会得到一个比较相应元素的结果的数组。 如果x!=y简直等于not (x==y)则不能这样做。

更一般地说,在许多有价值的逻辑系统中, equals not equals彼此不一定是彼此的精确逆。

SQL显然是True == TrueFalse == FalseNull != Null 。 虽然我不知道是否有任何特定的Python例子,我可以想象它在地方实施。