Как определить равенство экземпляров класса Python

Определите __eq__, сравнивающий value для A, а для неподдерживаемого типа возвращайте NotImplemented. Is продолжит проверять идентичность, а не поля.

Короткий ответ

Что ответить на собеседовании

Определите eq, сравнивающий value для A, а для неподдерживаемого типа возвращайте NotImplemented. Is продолжит проверять идентичность, а не поля.

Подробный разбор

Ответ с пояснениями

Условие

Класс A содержит value. Два разных экземпляра A(5) должны быть равны через ==, но не через is. Как реализовать сравнение с корректной обработкой другого типа?

Ответ

Определите eq, сравнивающий value для A, а для неподдерживаемого типа возвращайте NotImplemented. Is продолжит проверять идентичность, а не поля.

Пример:

class A:
    def __init__(self, value):
        self.value = value
    def __eq__(self, other):
        if type(other) is not type(self):
            return NotImplemented
        return self.value == other.value

Изменяемый объект с таким равенством обычно не следует делать хешируемым. Если требуется использование в set, контракт hash и неизменяемость нужно продумать отдельно.

Источник: docs.python.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее