Должен ли я проверить идентичность объекта в функции 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 оператор для lists; код 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, Это, однако, необычный случай.

Другие вопросы по тегам