Herencia múltiple de Python: ¿Qué es y cómo usarlo?

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.

Herencia múltiple en Python

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.

Herencia multinivel en Python

Orden de resolución de métodos en Python

Cada clase en Python se deriva de la objectclase. 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 objectclase.

 # 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 MultiDerivedla clase es el orden de búsqueda ( MultiDerived, Base1, Base2, object). Este orden también se denomina linealización de MultiDerivedclase 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.

Visualización de herencia múltiple en Python
 # 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.

Articulos interesantes...