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.
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