Los métodos dunder son los métodos especiales con doble guion bajo a los que la sintaxis de Python delega. Llamar a len sobre un objeto invoca dunder len, el operador más invoca dunder add, y un bucle for invoca dunder iter. Implementarlos hace que tu clase se comporte como un tipo nativo, de modo que los protocolos del lenguaje funcionan sobre tus objetos en lugar de que te inventes nombres de método propios.
Por qué lo preguntan los entrevistadores
Esto distingue a quien escribe Python de quien escribe otro lenguaje con sintaxis de Python. El entrevistador quiere oír la idea de protocolo: que el duck typing en CPython se implementa mediante estos ganchos, y que el instinto correcto es implementar el protocolo en vez de añadir un método llamado to_string. Saber qué dunder elegir, como repr frente a str, indica soltura del día a día.
Cómo estructurar tu respuesta
- Defínelos como ganchos a los que llama la sintaxis.
- Da dos o tres correspondencias concretas.
- Explica la idea de protocolo que hay detrás.
- Nombra los que implementas más a menudo.
Ejemplo de respuesta
Son los ganchos que llama el intérprete cuando usas sintaxis. El acceso con corchetes va a dunder getitem, la palabra clave in va a dunder contains, la igualdad va a dunder eq, y así con todo. La cuestión es que Python define el comportamiento como protocolos en lugar de interfaces que heredas, así que si mi objeto implementa dunder iter y dunder next es un iterador, punto, sin necesidad de clase base. En la práctica los que más implemento son repr, eq y hash. Repr sobre todo, porque un buen repr que muestre los campos identificativos convierte una sesión de depuración inútil en una de cinco minutos, mientras que el object at 0x7f por defecto no te dice nada. Tengo cuidado con eq y hash juntos, porque definir eq sin hash hace que las instancias no sean hashables y dejan de funcionar en silencio como claves de diccionario. En un modelo de dominio que construí, añadir dunder lt nos dejó ordenar registros con la llamada nativa sorted en vez de pasar una función key por todas partes.
¿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
- ¿Cuál es la diferencia entre repr y str?
- ¿Por qué eq y hash tienen que ser coherentes entre sí?
- ¿En qué se diferencia dunder getattr de getattribute?
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