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 :
<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</code>
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'invocation 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 :
<code class="python">D.__mro__ (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)</code>
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.
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!