Sobes.tech
Back to questions
Junior — Middle
66

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

Companies where asked
БАРС группБАРС групп

Answer from AI

sobes.tech AI

Объекты класса могут использоваться в качестве ключей в словаре 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__), использовать его в качестве ключа нельзя.