Назад к вопросам
Yadro
Middle+
7
Может ли экземпляр пользовательского класса (class MyType) быть ключом в словаре?
Компании, где спрашивали
Ответ от нейросети
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"
Таким образом, экземпляр пользовательского класса может быть ключом в словаре, если он поддерживает необходимые операции сравнения и хеширования.