Почему в Python есть метод оператора __ne__ вместо простого __eq__? - PullRequest
37 голосов
/ 26 февраля 2012

Ответ здесь дает ручную пометку о случаях, когда вы хотите, чтобы __ne__ возвратил что-то отличное от логического обратного __eq__, но я не могу представить ни одного такого случая.Есть примеры?

Ответы [ 3 ]

29 голосов
/ 26 февраля 2012

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, поэтому оба метода должны быть определены.

29 голосов
/ 26 февраля 2012

Некоторые библиотеки делают причудливые вещи и не возвращают 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)

Когда вы сравниваете массив с одним значением или другим массивом, вы получаете массив значений результатов сравнения соответствующих элементов. Вы не могли бы сделать это, если бы x!=y было просто эквивалентно not (x==y).

8 голосов
/ 26 февраля 2012

В более общем смысле, в многих системах логики , equals и not equals не обязательно являются точными противоположностями друг друга.

Очевидным примером является SQL, где True == True, False == False и Null != Null. Хотя я не знаю, есть ли какие-то конкретные примеры Python, я могу представить, что он реализован местами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...