Repaso
English
PythonAvanzadoPY-11

Una clase define __eq__ pero no __hash__. ¿Qué pasa cuando añades una instancia a un set?

Opciones

  1. Usa el hash de identidad por defecto
  2. TypeError: unhashable type (Opción correcta)
  3. Funciona, pero se permiten duplicados
  4. Usa __eq__ para calcular un hash

Respuesta

TypeError: unhashable type

Por qué

Los sets y las claves de diccionario encuentran objetos por su hash (un número calculado a partir del objeto).

La regla es: los objetos iguales deben tener el mismo hash. Cuando escribes tu propio __eq__, Python no puede asegurar que el hash anterior siga cumpliendo esa regla, así que asigna __hash__ = None.

El objeto pasa a ser unhashable y añadirlo a un set lanza TypeError. Define __hash__ con los mismos campos que comparas en __eq__.

Recuerda

Si sobrescribes __eq__ → define también __hash__ si necesitas sets o claves de dict.

Términos clave

Practica esta pregunta en Repaso