В ответе здесь приведена ссылка на случай, когда вы хотите, чтобы __ne__
возвращал нечто, отличное от логического обратного __eq__
, но я не может представить такого случая. Любые примеры?
Почему у Python есть __ne__ operator method вместо __eq__?
Ответ 1
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
не возвращает логическое значение, а объект, который в конечном итоге создает SQL-запрос, например WHERE theme.id = vote.post_id
. Обратный создавал бы нечто вроде WHERE theme.id <> vote.post_id
, поэтому оба метода должны быть определены.
Ответ 2
Некоторые библиотеки придумывают вещи и не возвращают 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)
Когда вы сравниваете массив с одним значением или другим массивом, вы возвращаете массив bools результатов сравнения соответствующих элементов. Вы не могли бы сделать этого, если x!=y
просто эквивалентно not (x==y)
.
Ответ 3
В более общем плане, в многозначной логике, equals
и not equals
не обязательно являются точными инверсиями друг друга.
Очевидным примером является SQL, где True == True
, False == False
и Null != Null
. Хотя я не знаю, есть ли какие-либо конкретные примеры Python, я могу себе представить, что это реализуется в местах.