Sobes.tech
Junior — Middle
88

¿Qué funciones es necesario definir en la clase para usar su instancia como clave en un diccionario de Python?

Empresas donde se preguntó
БилайнБилайн

Respuesta de la IA

sobes.tech AI

Чтобы экземпляр класса можно было использовать в качестве ключа в словаре Python, необходимо, чтобы он был хешируемым. Для этого нужно определить в классе методы __hash__ и __eq__.

  • __hash__(self) должен возвращать целочисленное значение, которое будет использоваться для быстрого поиска ключа.
  • __eq__(self, other) должен определять логику сравнения объектов на равенство.

Важно, чтобы объекты, считающиеся равными (__eq__ возвращает True), имели одинаковый хеш (__hash__).

Пример:

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