Можно ли использовать объект своего класса в качестве ключа словаря?

Объекты класса могут использоваться в качестве ключей в словаре Python, если они являются хешируемыми.

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

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

Объекты класса могут использоваться в качестве ключей в словаре Python, если они являются хешируемыми. Для этого класс должен реализовывать методы hash() и eq(). По умолчанию объекты пользовательских классов хешируемы, если не переопределены эти методы, и их хеш основан на идентификаторе объекта (адресе в памяти).

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

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

Объекты класса могут использоваться в качестве ключей в словаре Python, если они являются хешируемыми. Для этого класс должен реализовывать методы __hash__() и __eq__(). По умолчанию объекты пользовательских классов хешируемы, если не переопределены эти методы, и их хеш основан на идентификаторе объекта (адресе в памяти).

Если вы хотите, чтобы разные объекты с одинаковыми значениями считались одинаковыми ключами, нужно реализовать __hash__ и __eq__ соответственно. Например:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __eq__(self, other):
        return isinstance(other, Point) and self.x == other.x and self.y == other.y

    def __hash__(self):
        return hash((self.x, self.y))

points_dict = {Point(1, 2): "A point"}
print(points_dict[Point(1, 2)])  # Выведет "A point"

Если объект не хешируем (например, содержит изменяемые поля без реализации __hash__), использовать его в качестве ключа нельзя.

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

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

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

Подробнее