Repaso
English
PythonIntermedioPY-23

¿Qué te da @dataclass(frozen=True) (con eq=True por defecto)?

Opciones

  1. Instancias mutables con un __hash__ generado
  2. Instancias inmutables que además son hashable (Opción correcta)
  3. Instancias que no se pueden comparar
  4. Validación automática de los tipos de los campos

Respuesta

Instancias inmutables que además son hashable

Por qué

@dataclass escribe por ti __init__, __repr__ y __eq__ a partir de la lista de campos.

frozen=True hace que los objetos sean de solo lectura: cambiar un campo lanza un error.

Como un objeto congelado nunca cambia, su hash sigue siendo válido, así que Python también crea __hash__ y puedes usar el objeto en sets o como clave de dict. Nota: las dataclasses no validan tipos (Pydantic sí).

Recuerda

Dataclass frozen = inmutable + hashable.

Términos clave

Practica esta pregunta en Repaso