为什么Python有一个__ne__运算符方法而不仅仅是__eq__?

时间:2012-02-26 11:01:14

标签: python operator-overloading

答案here提供了一个手动引用的案例,指出您希望__ne__返回的内容不仅仅是__eq__的逻辑反转,但我无法想象案件。有什么例子吗?

3 个答案:

答案 0 :(得分:29)

有些图书馆做的很奇怪,并且不会从这些操作中返回bool。例如,使用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)

当您将数组与单个值或另一个数组进行比较时,您会得到一个比较相应元素的结果的bool数组。如果x!=y仅等同于not (x==y),则无法执行此操作。

答案 1 :(得分:29)

SQLAlchemy就是一个很好的例子。对于初学者,SQLAlchemy是一个ORM并使用Python表达式来生成SQL语句。在诸如

之类的表达中
meta.Session.query(model.Theme).filter(model.Theme.id == model.Vote.post_id)

model.Theme.id == model.VoteWarn.post_id不返回布尔值,而是最终生成类似WHERE theme.id = vote.post_id的SQL查询的对象。逆会产生类似WHERE theme.id <> vote.post_id的东西,因此需要定义两种方法。

答案 2 :(得分:8)

更一般地说,在many valued logic系统中,equalsnot equals不一定是彼此完全相反的。

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