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 color
y en la Clase Dos tenemos sound
. Luego 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.color
y 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.
0 Comentarios