Back to questions
Junior — Middle
75
Каким образом обеспечить возможность использования экземпляров вашего класса в качестве ключей в словаре?
Answer from AI
sobes.tech AI
Чтобы экземпляры вашего класса в Python можно было использовать в качестве ключей в словаре, они должны быть хешируемыми. Для этого нужно:
- Реализовать метод
__hash__(), который возвращает целочисленное значение хеша. - Реализовать метод
__eq__(), чтобы корректно сравнивать объекты на равенство.
Важно, чтобы объекты были неизменяемыми по полям, участвующим в вычислении хеша, иначе словарь может работать некорректно.
Пример:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __eq__(self, other):
if not isinstance(other, Point):
return False
return self.x == other.x and self.y == other.y
def __hash__(self):
return hash((self.x, self.y))
p1 = Point(1, 2)
p2 = Point(1, 2)
my_dict = {p1: "A point"}
print(my_dict[p2]) # Выведет: A point
В этом примере два объекта с одинаковыми координатами считаются равными и имеют одинаковый хеш, поэтому p2 можно использовать для доступа к значению в словаре, где ключом был p1.