При реализации функции __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






Вы можете реализовать это, хотя для большинства случаев это, скорее всего, будет небольшой микрооптимизацией. Эта идея оптимизации была применена разработчиками ядра Python для реализации оператора in для list; код - 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. Однако это необычный случай.
Также верно для nan = float('nan'): nan == nan → False и nan is nan → True.
Я бы сказал, что нет, если только ваш
__eq__по какой-то причине не стоит дорого. Если, например, вы просто проверите, равны ли некоторые члены, даже если они «сложные» (например, строки или списки), внутренняя реализация Python обязательно выполнит проверку. Примером, где я, вероятно, это сделал бы, является древовидная структура данных.