Определите eq, сравнивающий value для A, а для неподдерживаемого типа возвращайте NotImplemented. Is продолжит проверять идентичность, а не поля.
Как определить равенство экземпляров класса Python
Определите __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.