HOWTO · Python
Python MRO(Orden de resolución de métodos)
En este artículo, aprenderemos qué es Python MRO(Orden de resolución de métodos) y cómo desempeña su papel en la herencia. MRO describe la ruta de búsqueda de la clase que usa Python para obtener la función específica en las clases que contienen herencia múltiple.
Las herencias múltiples significan que una sola subclase puede heredar más de una clase, y la subclase estará autorizada para acceder a los atributos y funciones a menos que no sean privados para esa clase específica. Allí se utiliza la técnica MRO para buscar el orden de ejecución de las clases.
En este artículo, aprenderemos Python MRO (Orden de resolución de métodos).
MRO (Orden de resolución de métodos) en Python
MRO es el orden en Python donde se busca un método en la jerarquía de clases. Principalmente se usa para buscar métodos y atributos en las clases principales de una subclase.
Primero, se busca el atributo o método dentro de la subclase, siguiendo el orden especificado mientras se hereda. Este orden también se conoce como Linealización de una clase, y se aplica un conjunto de reglas al verificar el orden.
Mientras hereda de otras clases, el compilador necesita una forma adecuada de resolver los métodos llamados a través de una instancia de la clase. Desempeña un papel importante en herencias múltiples cuando tenemos la misma función en más de un padre de clases base.
Ejemplo de código:
class A(object):
def dothis(self):
print("This is A class")
# Class B is inheriting Class A
class B(A):
def dothis(self):
print("This is B class")
# Class C is inheriting Class B
class C(B):
def dothis(self):
print("This is C class")
# Class D is inheriting Class C and B
class D(C, B):
def dothis(self):
print("This is D class")
# creating the object of Class D
d_obj = D()
# calling funtion dothis()
d_obj.dothis()
print(D.mro())
Producción :
This is D class
[<class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
En el ejemplo anterior, la función dothis() está disponible en todas las clases. Cuando lo llama usando el objeto d_obj de la clase D, primero lo verifica en la clase actual.
Si está allí, devolverá la función. De lo contrario, seguirá buscando en las clases padre de acuerdo con las reglas de la función mro().
Además, para conocer el orden de las clases, llame a la función mro() usando el nombre de la clase actual como se muestra en el ejemplo anterior, D.mro(). El orden actual es Clase D -> Clase C -> Clase B -> Clase A, y puede cambiarlo en consecuencia durante la herencia.