En este tutorial, aprenderá sobre la herencia múltiple en Python y cómo usarla en su programa. También aprenderá sobre la herencia de varios niveles y el orden de resolución de los métodos.
Herencia múltiple de Python
Una clase se puede derivar de más de una clase base en Python, similar a C ++. A esto se le llama herencia múltiple.
En la herencia múltiple, las características de todas las clases base se heredan en la clase derivada. La sintaxis de la herencia múltiple es similar a la herencia única.
Ejemplo
class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
Aquí, la clase MultiDerived se deriva de las clases Base1 y Base2.

La clase MultiDerived hereda de las clases Base1 y Base2.
Herencia multinivel de Python
También podemos heredar de una clase derivada. Esto se llama herencia multinivel. Puede ser de cualquier profundidad en Python.
En la herencia multinivel, las características de la clase base y la clase derivada se heredan en la nueva clase derivada.
A continuación se ofrece un ejemplo con la visualización correspondiente.
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
Aquí, la clase Derived1 se deriva de la clase Base y la clase Derived2 se deriva de la clase Derived1.

Orden de resolución de métodos en Python
Cada clase en Python se deriva de la object
clase. Es el tipo más básico en Python.
Entonces, técnicamente, todas las demás clases, ya sean integradas o definidas por el usuario, son clases derivadas y todos los objetos son instancias de la object
clase.
# Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))
En el escenario de herencia múltiple, cualquier atributo especificado se busca primero en la clase actual. Si no se encuentra, la búsqueda continúa en las clases principales en profundidad, primero, de izquierda a derecha sin buscar la misma clase dos veces.
Así, en el ejemplo anterior de MultiDerived
la clase es el orden de búsqueda ( MultiDerived
, Base1
, Base2
, object
). Este orden también se denomina linealización de MultiDerived
clase y el conjunto de reglas que se utilizan para encontrar este orden se denomina Orden de resolución de método (MRO) .
MRO debe evitar el orden de precedencia local y también proporcionar monotonicidad. Asegura que una clase siempre aparezca ante sus padres. En el caso de varios padres, el orden es el mismo que el de las tuplas de clases base.
El MRO de una clase puede verse como el __mro__
atributo o el mro()
método. El primero devuelve una tupla mientras que el segundo devuelve una lista.
>>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )
Aquí hay un ejemplo de herencia múltiple un poco más complejo y su visualización junto con el MRO.

# Demonstration of MRO class X: pass class Y: pass class Z: pass class A(X, Y): pass class B(Y, Z): pass class M(B, A, Z): pass # Output: # (, , # , , # , , # ) print(M.mro())
Salida
(,,,,,,)
Para conocer el algoritmo real sobre cómo se calcula MRO, visite Discusión sobre MRO.