Pregunta de entrevista para Desarrollador Python

¿Cómo decide Python a qué método llamar con herencia múltiple?

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Python calcula un orden de resolución de métodos con la linealización C3, que conserva el orden de bases propio de cada clase y garantiza que una subclase aparezca antes que sus padres. La búsqueda de atributos recorre esa lista y toma la primera coincidencia. Puedes inspeccionarla con el método mro, y super sigue el MRO de la instancia real, no solo la clase padre inmediata.

Por qué lo preguntan los entrevistadores

Los mixins están por todas partes en Django y DRF, así que los entrevistadores quieren saber si puedes predecir qué implementación gana y depurarlo cuando un mixin sobrescribe algo en silencio. La señal de verdad es entender que super no es sinónimo de padre; es la siguiente clase en el MRO de la instancia. Ese malentendido es la raíz de la mayoría de los bugs de herencia cooperativa en los que la gente se deja tardes enteras.

Cómo estructurar tu respuesta

  • Nombra la linealización C3 y qué garantiza.
  • Di que la búsqueda toma la primera coincidencia en ese orden.
  • Corrige la lectura errónea habitual de super.
  • Menciona cómo inspeccionas el MRO en la práctica.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Python construye un orden lineal de la clase y todos sus ancestros usando C3, y luego la búsqueda de atributos recorre esa lista de arriba abajo y se para en la primera coincidencia. C3 garantiza dos cosas: una clase siempre va antes que aquello de lo que hereda, y se conserva el orden relativo en el que escribiste tus bases. Si no se pueden cumplir ambas restricciones, la propia definición de la clase lanza un TypeError en tiempo de importación, lo cual es una buena propiedad porque te enteras de inmediato y no en ejecución. La parte que me aseguro de decir es que super no significa padre. Significa la siguiente entrada después de la clase actual en el MRO de la instancia, y por eso un mixin que llama a super puede acabar en una clase hermana de la que nunca heredó. Esa es la base entera de la herencia múltiple cooperativa en las vistas basadas en clases de Django. Cuando pasa algo sorprendente imprimo la lista mro, y la respuesta suele ser obvia en segundos porque el orden de los mixins en la sentencia class estaba al revés.

¿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 funciona

Preguntas de seguimiento que puedes esperar

  • ¿Qué pasa si C3 no puede producir un orden coherente?
  • ¿Por qué los mixins de Django van antes que la clase de vista base?
  • ¿Cómo se comporta super dentro de un método de clase?

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

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot