¿Qué te da @dataclass(frozen=True) (con eq=True por defecto)?
Opciones
- Instancias mutables con un
__hash__generado - Instancias inmutables que además son hashable (Opción correcta)
- Instancias que no se pueden comparar
- 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.