Maison > développement back-end > Tutoriel Python > Comment « super() » résout-il les appels de méthode dans l'héritage multiple Python ?

Comment « super() » résout-il les appels de méthode dans l'héritage multiple Python ?

Mary-Kate Olsen
Libérer: 2024-12-27 10:33:14
original
195 Les gens l'ont consulté

How Does `super()` Resolve Method Calls in Python Multiple Inheritance?

Super() en Python Héritage multiple

L'héritage multiple en Python soulève la question de savoir comment super() interagit avec lui. Considérez le code suivant :

class First(object):
    def __init__(self):
        print("first")

class Second(object):
    def __init__(self):
        print("second")

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__()
        print("that's it")
Copier après la connexion

Maintenant, à quelle méthode parent de Third super().__init__ fait-il référence ? Pouvez-vous choisir lequel s'exécute ?

Pour comprendre super() dans ce contexte, nous approfondissons le concept d'ordre de résolution de méthode (MRO). En Python, le MRO définit l'ordre dans lequel les méthodes sont résolues lorsqu'un héritage multiple est impliqué.

Dans notre exemple, Third() appellera First.__init__. Python examine chaque attribut des parents de la classe de gauche à droite. Pour __init__, Python recherche d'abord en premier, et s'il n'y est pas trouvé, il vérifie en deuxième.

La situation devient plus complexe avec l'héritage entrelacé. Apprenez-en davantage à ce sujet dans le billet de blog de Guido sur MRO. Cependant, Python conservera généralement l'ordre d'héritage tel qu'écrit, en commençant par la classe enfant elle-même.

Considérez l'exemple suivant :

class First(object):
    def __init__(self):
        print("first")

class Second(First):
    def __init__(self):
        print("second")

class Third(First):
    def __init__(self):
        print("third")

class Fourth(Second, Third):
    def __init__(self):
        super(Fourth, self).__init__()
        print("that's it")
Copier après la connexion

Ici, le MRO serait [Quatrième, Deuxième , Troisième, Premier].

Il est important de noter que si Python ne peut pas déterminer un MRO cohérent, il lève une exception plutôt que de recourir à des mesures potentiellement inattendues. comportement.

De plus, il convient de mentionner que les exemples fournis n'utilisent pas d'appels super(). Leur objectif est de démontrer comment le MRO est construit, et non d'imprimer un résultat spécifique. Nous vous encourageons à expérimenter les appels super() pour mieux comprendre le modèle d'héritage de 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal