Sobes.tech
Назад к вопросам
Middle+
7

Может ли экземпляр пользовательского класса (class MyType) быть ключом в словаре?

Компании, где спрашивали
YadroYadro

Ответ от нейросети

sobes.tech AI

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

Если речь о языке с классами (например, Python, Java, C#):

  • В Python экземпляры пользовательских классов могут быть ключами в словаре, если они реализуют методы __hash__ и __eq__ корректно.
  • В Java объекты могут быть ключами в HashMap, если реализованы методы hashCode() и equals().

Если класс не переопределяет эти методы, то ключи будут сравниваться по умолчанию (например, по ссылке), что может быть нежелательно.

Пример на Python:

class MyType:
    def __init__(self, value):
        self.value = value

    def __hash__(self):
        return hash(self.value)

    def __eq__(self, other):
        return isinstance(other, MyType) and self.value == other.value

my_dict = {}
obj = MyType(10)
my_dict[obj] = "data"

Таким образом, экземпляр пользовательского класса может быть ключом в словаре, если он поддерживает необходимые операции сравнения и хеширования.