Python tiene la capacidad de hacer uso de herencia múltiple, lo que permite que una subclase herede la funcionalidad de varias clases principales. A menudo, las herencias múltiples pueden ser bastante complicadas y algunos lenguajes de programación como Java lo prohíben estrictamente. Hay ocasiones en las que múltiples herencias pueden tener su utilidad. Se puede utilizar para crear objetos que tengan dos conjuntos de comportamientos distintos. Python hace uso de algo llamado Orden de resolución de métodos, o MRO, para determinar cómo heredar de más de una Superclase. Echemos un vistazo a cómo funciona esto ahora.


Ejemplo de herencia múltiple

En este código a continuación, primero vemos que hay dos clases, Clase Uno y Clase Dos, cada una de las cuales define un atributo. En la Clase Uno tenemos colory en la Clase Dos tenemos soundLuego está la tercera clase llamada Clase Tres, que enumera tanto la Clase Uno como la Clase Dos como clases base, separadas por una coma, y ​​así es como se hereda de más de una clase al mismo tiempo. En la clase Tres hay un método para imprimir esos atributos. El showprops()método imprime self.colory también imprime self.sound, cada uno de los cuales se hereda de una clase diferente (herencia múltiple).


Instanciar un objeto

Aquí instanciamos la clase Three () y la asignamos a la variable obj_three. Three () hereda de las clases Uno y Dos. Sin embargo, observe que dado que pasamos las clases heredadas a la inversa, Tres (Dos, Uno), afecta la forma en que el objeto final busca atributos y métodos. Podemos ver cómo funciona esto al observar el orden de resolución del método.


MRO

Python usa el algoritmo de linealización C3 para determinar el orden en el que resolver los atributos de la clase, incluidos los métodos. Esto se conoce como Orden de resolución de método (MRO).

(<clase '__main __. Tres'>, <clase '__main __. Dos'>, <clase '__main __. Uno'>, <clase 'objeto'>)

Lo que esto nos muestra es que la clase Tres tiene la prioridad más alta, la clase Dos la segunda y la clase Uno la tercera. Tenga esto en cuenta cuando ejecutemos el siguiente código.

Un color
Dos sonidos
Ambientado en la clase dos

Super Whack !!

Orden de clases

¿Cómo cambia la salida de nuestro código si modificamos la definición de clase Tres?

(<clase '__main __. Tres'>, <clase '__main __. Uno'>, <clase '__main __. Dos'>, <clase 'objeto'>)

obj_three.showprops ()

Un color
Dos sonidos
Ambientado en la primera clase

¡Golpear!

Ambas clases Uno y Dos tienen un atributo de nombre así como un método karate_chop (). El valor de ese atributo y la salida de ese método son diferentes según el orden de resolución del método resultante de cómo se pasan las Superclases a la Subclase. Este es un concepto importante a tener en cuenta cuando se intenta implementar múltiples herencias en Python.