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")
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")
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!