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

Jeg*_*sch 37 python operator-overloading

这里的答案提供了一个手工引用的参考,你想要__ne__返回的东西不仅仅是逻辑逆__eq__,但我无法想象任何这样的情况.任何例子?

Wee*_*ble 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)
Run Code Online (Sandbox Code Playgroud)

当您将数组与单个值或另一个数组进行比较时,您会得到一个比较相应元素的结果的bool数组.如果x!=y只是等同于你,你不能这样做not (x==y).

  • 虽然可以使用`__not__`特殊方法来覆盖`not`运算符,但这在Python中目前不存在. (6认同)

Joc*_*zel 29

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

meta.Session.query(model.Theme).filter(model.Theme.id == model.Vote.post_id)
Run Code Online (Sandbox Code Playgroud)

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


Ben*_*Ben 8

更一般地,在许多有价值的逻辑系统中,equals并且not equals不一定是彼此完全相反的.

最明显的例子就是SQL其中True == True,False == FalseNull != Null.虽然我不知道是否有任何特定的Python示例,但我可以想象它是在某些地方实现的.