Herencia múltiple, MRO y Mixins en Python
Cómo Python resuelve el diamond problem con C3 linearization y cómo los Mixins permiten combinar comportamiento de forma predecible y mantenible.
Cómo Python resuelve el diamond problem con C3 linearization y cómo los Mixins permiten combinar comportamiento de forma predecible y mantenible.
Cómo Python calcula el MRO con el algoritmo C3 y por qué `super()` llama al siguiente en la cadena, no al padre directo.
Cómo una subclase hereda atributos y métodos, cuándo usar super(), la diferencia entre extender y reemplazar, y cuándo preferir composición sobre herencia.
Diferencias prácticas entre los tres tipos de métodos en Python: cuándo cada uno recibe self, cls o ninguno, y por qué importa al heredar.
`self` es el primer parámetro de los métodos de instancia; Python transforma `obj.metodo(arg)` en `Clase.metodo(obj, arg)` automáticamente, haciendo visible lo que otros lenguajes ocultan.
Diferencia entre atributos de clase e instancia, cómo funciona el lookup en Python y el peligro oculto de los mutables compartidos.
Cómo Python crea e inicializa objetos con `__new__` e `__init__`, y por qué los métodos viven en la clase mientras los atributos viven en la instancia.
Implementa context managers propios con `__enter__` y `__exit__` para garantizar limpieza de recursos con semántica equivalente a `try/finally`.
Cómo funciona el protocolo de iteración de Python, la diferencia entre iterable e iterador, y cómo implementar ambos correctamente.
Cómo implementar operadores de igualdad, orden y aritmética en Python, incluyendo versiones reflejadas e in-place, y la regla crítica de __hash__.