Python MRO(Method Resolution Order)

Zeeshan Afridi 21 Juni 2023
Python MRO(Method Resolution Order)

Mehrfachvererbung bedeutet, dass eine einzelne Unterklasse mehr als eine Klasse erben kann und die Unterklasse berechtigt ist, auf die Attribute und Funktionen zuzugreifen, es sei denn, sie sind nicht privat für diese bestimmte Klasse. Dort wird die MRO-Technik verwendet, um die Reihenfolge der ausgeführten Klassen zu suchen.

In diesem Artikel lernen wir Python MRO (Method Resolution Order) kennen.

MRO (Method Resolution Order) in Python

MRO ist die Reihenfolge in Python, in der in der Klassenhierarchie nach einer Methode gesucht wird. Meistens wird es verwendet, um nach Methoden und Attributen in den Elternklassen einer Unterklasse zu suchen.

Zuerst wird das Attribut oder die Methode innerhalb der Unterklasse gesucht, wobei beim Vererben die angegebene Reihenfolge eingehalten wird. Diese Reihenfolge wird auch als Linearisierung einer Klasse bezeichnet, und beim Überprüfen der Reihenfolge wird eine Reihe von Regeln angewendet.

Beim Erben von anderen Klassen benötigt der Compiler eine geeignete Methode zum Auflösen der Methoden, die über eine Instanz der Klasse aufgerufen werden. Es spielt eine wichtige Rolle bei Mehrfachvererbungen, wenn wir dieselbe Funktion in mehr als einem Elternteil von Basisklassen haben.

Codebeispiel:

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())

Ausgang:

This is D class
[<class '__main__.D'>, <class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]

Im obigen Beispiel ist die Funktion dothis() in jeder Klasse verfügbar. Wenn Sie es über das Objekt d_obj der Klasse D aufrufen, prüft es es zuerst in der aktuellen Klasse.

Wenn es vorhanden ist, wird die Funktion zurückgegeben. Andernfalls wird nach den Regeln der Funktion mro() weiter in die übergeordneten Klassen geschaut.

Um die Reihenfolge der Klassen zu kennen, rufen Sie außerdem die Funktion mro() mit dem aktuellen Klassennamen auf, wie im obigen Beispiel D.mro() gezeigt. Die aktuelle Reihenfolge ist Klasse D -> Klasse C -> Klasse B -> Klasse A und Sie können sie während der Vererbung entsprechend ändern.

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