"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > En quoi l’ordre de résolution de méthode (MRO) dans les classes de nouveau style diffère-t-il des classes de style hérité et résout-il les conflits d’héritage ?

En quoi l’ordre de résolution de méthode (MRO) dans les classes de nouveau style diffère-t-il des classes de style hérité et résout-il les conflits d’héritage ?

Publié le 2024-11-15
Parcourir:117

How does Method Resolution Order (MRO) in New-Style Classes differ from Legacy-Style Classes and resolve inheritance conflicts?

Ordre de résolution de méthode (MRO) dans les classes de nouveau style

Clarification du MRO dans les classes de nouveau style

Contrairement aux anciens -classes de style, les classes de nouveau style introspectent leurs classes de base pour établir un ordre de résolution de méthode (MRO). Cet ordre détermine l'ordre dans lequel les méthodes sont recherchées lorsqu'une méthode est appelée sur un objet.

Résoudre les conflits d'héritage avec MRO

La distinction clé entre MRO dans les nouveaux- Les classes de style et de style ancien apparaissent lorsque la même classe ancêtre apparaît plusieurs fois dans la hiérarchie d'héritage. Par exemple, considérons le cas d'héritage de diamant suivant :

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

MRO de style hérité :

Dans les classes de style hérité, l'ordre de résolution serait D - B - A - C - A. Ici, lors de l'appel de D .amethod(), la définition dans A est trouvée en premier et remplace la définition dans C.

MRO nouveau style :

Pour les classes de nouveau style, le MRO est le suivant :

D.__mro__
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>,
<class '__main__.A'>, <type 'object'>)

Remarquez que A n'apparaît qu'une seule fois dans cet ordre, après toutes ses sous-classes. Cela garantit que les remplacements dans les sous-classes, tels que le remplacement d'une méthode par C, ont la priorité.

Comprendre l'importance du MRO

Le MRO dans les classes de nouveau style résout les conflits d'héritage judicieusement, permettant aux remplacements de fonctionner correctement. Cela évite également les situations dans lesquelles plusieurs définitions de la même méthode apparaissent dans l’ordre de résolution, conduisant à un comportement ambigu. En comprenant et en utilisant efficacement MRO, les développeurs peuvent concevoir des hiérarchies d'héritage robustes et maintenables en Python.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3