Python MRO(Orden de resolución de métodos)

Zeeshan Afridi 21 junio 2023
Python MRO(Orden de resolución de métodos)

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.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn