Usa un dataclass para estructuras internas mutables donde quieres atributos normales y tener gratis init, repr y eq. Usa un NamedTuple cuando quieras un registro inmutable, parecido a una tupla, que se desempaqueta y se hashea barato. Usa Pydantic en las fronteras del sistema, donde necesitas validación en tiempo de ejecución, conversión y serialización de datos que llegan por HTTP, ficheros de configuración o colas.
Por qué lo preguntan los entrevistadores
Hay cuatro o cinco maneras de declarar un registro en el Python moderno, y el entrevistador quiere saber si eliges a conciencia en vez de tirar de lo último que usaste. La idea clave que espera oír es que las anotaciones de tipo de un dataclass no se comprueban en tiempo de ejecución, así que la validación es exactamente lo que te compra Pydantic, y que pagar validación en cada objeto interno es trabajo desperdiciado.
Cómo estructurar tu respuesta
- Ordena las tres opciones según de dónde vienen los datos.
- Di que las anotaciones de un dataclass no se comprueban en ejecución.
- Da el ángulo de inmutabilidad y hashing de NamedTuple.
- Di cuál es tu opción por defecto y la regla de la frontera.
Ejemplo de respuesta
Mi regla es que Pydantic vigila los bordes y los dataclasses viven dentro. Todo lo que cruza una frontera, un cuerpo de petición, una configuración de entorno, un mensaje de una cola, lleva un modelo de Pydantic porque quiero que se valide y se convierta una vez, en alto, en el punto en el que llega. Todo lo que viene después puede ser un dataclass normal con slots activados, porque ya sé que los datos son buenos y no quiero pagar el coste de validación en cada objeto que construyo dentro de un bucle. Lo que se le escapa a la gente es que anotar un campo de dataclass como int no hace nada en ejecución, así que le pasas una cadena y guarda la cadena tan contento. NamedTuple lo uso menos, sobre todo para registros pequeños e inmutables que tienen que ser claves de diccionario o desempaquetarse, como un par de coordenadas o una clave de caché. En un servicio en el que trabajé, pasar una ruta interna caliente de modelos de Pydantic a dataclasses con slots recortó de forma apreciable el tiempo de un batch, solo por saltarnos revalidar datos que ya habíamos comprobado.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Qué hace slots igual a True en un dataclass?
- ¿Cómo haces que un dataclass sea inmutable?
- ¿Qué cambió entre Pydantic v1 y v2?
Más preguntas para Desarrollador Python
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas