Должен ли я проверить идентичность объекта в функции eq
При реализации __eq__
Функция мне было интересно, если тестирование на идентичность с помощью is
Ключевое слово должно быть частью теста? Проверка на равенство для 2 разных переменных может сразу оценить True
посредством is
функция, когда переменные указывают на один и тот же экземпляр объекта. В случае, если переменные указывают на разные случаи, конечно, необходимо дальнейшее тестирование. Скажем у нас S = U
тогда, очевидно, мы хотим S == U
возвращать True
и тестирование на личность ускорит это.
def __eq__(self, other):
if self is other:
return True
else:
pass # do another user defined test for equality
1 ответ
Вы могли бы реализовать это, хотя это, вероятно, будет небольшая микрооптимизация для большинства случаев использования. Эта идея оптимизации была применена разработчиками ядра Python для того, как они реализовали in
оператор для list
s; код C (в CPython), но эквивалентная логика Python будет такой:
any(element is target or element == target for element in lst)
Однако имейте в виду, что это может быть не совсем то, что вы хотите, например, numpy.NAN is numpy.NAN
является True
но numpy.NAN == numpy.NAN
является False
, Это, однако, необычный случай.