El decorador dataclass de Python lanza un ValueError cuando un campo recibe un valor predeterminado mutable (lista, diccionario, conjunto, etc.). Si se permitiera, todas las instancias compartirían el mismo objeto, causando bugs sutiles. La solución es usar field(default_factory=...) en su lugar.
Por qué ocurre
- •Un campo de dataclass recibe una lista, dict o conjunto vacío como valor predeterminado.
- •Se usa un objeto mutable personalizado como predeterminado sin envolverlo en default_factory.
- •Copiar una clase que no es dataclass a una dataclass sin actualizar los valores predeterminados.
Ejemplos
Código que causa el error
from dataclasses import dataclass
@dataclass
class Config:
tags: list = [] # mutable defaultError en la terminal
ValueError: mutable default <class 'list'> for field tags is not allowed: use default_factory
Cómo solucionarlo
Reemplaza los valores predeterminados mutables con field(default_factory=list), field(default_factory=dict), etc. Para un valor predeterminado personalizado, usa field(default_factory=lambda: MyClass()). Esto asegura que cada instancia obtenga su propia copia independiente del valor mutable.
Código corregido
from dataclasses import dataclass, field
@dataclass
class Config:
tags: list = field(default_factory=list)Errores relacionados
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis