En la mayoría de los lenguajes orientados a objetos, una clase hereda de una sola clase base.
Sin embargo, Python permite herencia múltiple, lo que significa que una clase puede derivar de más de una clase padre.
class A:
def metodo(self):
print("Método de A")
class B:
def metodo(self):
print("Método de B")
class C(A, B): # Hereda de A y B
pass
obj = C()
obj.metodo()
Salida : Método de A
Python resuelve los métodos según el orden de resolución de métodos (MRO, Method Resolution Order).
En este caso, busca primero en A, luego en B, y finalmente en object.
Podemos ver el orden con:
print(C.__mro__)
Que muestra algo como:
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
Python permite usar super() para encadenar llamadas a métodos en la jerarquía.
class A:
def metodo(self):
print("A.metodo()")
super().metodo()
class B:
def metodo(self):
print("B.metodo()")
super().metodo()
class C:
def metodo(self):
print("C.metodo()")
class D(A, B, C):
pass
d = D()
d.metodo()
Salida:
A.metodo()
B.metodo()
C.metodo()
El orden sigue el MRO: D → A → B → C → object.
Una forma muy común de usar herencia múltiple en Python es con mixins: clases pequeñas que agregan comportamiento extra sin ser jerarquías principales.
class LoggerMixin:
def log(self, mensaje):
print(f"[LOG]: {mensaje}")
class Worker:
def trabajar(self):
print("Trabajando...")
class Empleado(LoggerMixin, Worker):
def realizar_tarea(self):
self.log("Iniciando tarea")
self.trabajar()
e = Empleado()
e.realizar_tarea()
Salida:
[LOG]: Iniciando tarea
Trabajando...
Los mixins son una forma elegante de reutilizar código sin acoplar las clases principales.
Resumiendo:
- Python permite herencia múltiple.
- El MRO define el orden en que se buscan los métodos.
- super() respeta ese orden automáticamente.
- Los mixins son el uso más común y limpio de la herencia múltiple.
