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

问题描述 投票:0回答:3

答案here给出了对您希望

__ne__
返回除
__eq__
之外的其他内容的情况的手动参考,但我无法想象任何这样的情况。有例子吗?

python operator-overloading
3个回答
32
投票

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
的结果,因此这两种方法都需要定义。


30
投票

有些库做了一些奇特的事情,并且不会从这些操作中返回布尔值。例如,使用 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)
,则无法执行此操作。


8
投票

更一般地,在多值逻辑系统中,“等于”和“不等于”不一定彼此精确相反。

最明显的例子是 SQL,其中

True == True
False == False
Null != Null
。虽然我不知道是否有任何具体的Python示例,但我可以想象它在某些地方被实现。

© www.soinside.com 2019 - 2024. All rights reserved.