Встречается на собеседованиях • сегодня

Могут ли быть объекты класса ключом словаля

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

Пример:

python
class Person:
    def __init__(self, name):
        self.name = name

p1 = Person('Alice')
p2 = Person('Bob')
d = {p1: 1, p2: 2}  # Работает, так как объекты хешируемы

Если класс изменяемый (например, содержит изменяемые атрибуты), лучше явно запретить хеширование:

python
class MutablePerson:
    def __init__(self, name):
        self.name = name
    
    __hash__ = None  # Запрет хеширования

Важно: если переопределить __eq__, __hash__ автоматически становится None, если не переопределить его явно.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы