Maison > Article > développement back-end > Comment l'ordre de résolution de méthode (MRO) de Python garantit-il un héritage de méthode sans ambiguïté dans les classes de nouveau style ?
Ordre de résolution de méthode (MRO) dans les classes de nouveau style
Dans le contexte de la programmation basée sur les classes de Python, l'ordre de résolution de méthode (MRO) ) définit la séquence dans laquelle les recherches de méthodes sont effectuées sur les instances d'une classe. La mise en œuvre du MRO diffère entre les classes de style ancien et celles de style nouveau.
Héritage des classes à l'ancienne
Dans les classes à l'ancienne, le MRO suit une approche approfondie. première approche. Lors de la recherche d'une méthode dans une instance d'une sous-classe, l'interpréteur parcourt la hiérarchie d'héritage de la sous-classe, en profondeur d'abord. La première occurrence de la méthode dans les classes de base est renvoyée.
Héritage de classe de nouveau style
Avec l'introduction de classes de nouveau style, la sémantique MRO est devenue C3 linéarisation. Cette approche élimine l'ambiguïté résultant de plusieurs occurrences de la même classe de base dans la hiérarchie d'héritage. Le MRO pour les classes de nouveau style est calculé comme suit :
Exemple avec héritage multiple
Considérez l'exemple suivant impliquant un héritage multiple dans des classes de nouveau style :
<code class="python">class Base1(object): def amethod(self): print("Base1") class Base2(Base1): pass class Base3(object): def amethod(self): print("Base3") class Derived(Base2, Base3): pass instance = Derived() instance.amethod() print(Derived.__mro__) </code>
Dans cet exemple, même si Base1 apparaît plusieurs fois dans l'héritage hiérarchie, le MRO pour Derived est :
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
Cet ordre correspond à l'algorithme de linéarisation C3 décrit ci-dessus. Puisque Derived est la classe feuille, elle est placée en premier dans le MRO. Ensuite, ses classes de base sont ajoutées : Base2 (une sous-classe de Base1) et Base3, dans cet ordre. Enfin, l'objet est ajouté en tant que classe de base ultime.
Conclusion
Le MRO pour les classes de nouveau style fournit une méthode déterministe et sans ambiguïté pour résoudre l'héritage de méthode. Cela élimine les ambiguïtés potentielles qui pourraient résulter de plusieurs occurrences de la même classe de base, comme c'était le cas avec l'héritage de classe à l'ancienne.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!