Comment l'héritage multiple influence le comportement du super() de Python
L'héritage multiple en Python introduit des complexités dans la résolution des méthodes. Python détermine l'ordre de résolution de la méthode (MRO) pour établir quelle méthode parent doit être invoquée par super().
Dans votre exemple, Third hérite de First et Second. Lorsque super().__init__() est appelé dans Third.__init__(), il fait référence à First.__init__() car le MRO évalue les classes parentes de gauche à droite. Le premier est répertorié avant le second dans la chaîne d'héritage.
Python donne la priorité à l'ordre des classes dans la liste d'héritage lors de la construction du MRO. Ainsi, dans l'exemple suivant, le MRO est [Fourth, Second, Third, First, object] :
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")
Dans ce scénario, Fourth appellera First.__init__() au lieu de Second.__init__() car First est rencontré en premier dans le MRO.
Cependant, si l'ordre d'héritage est inversé :
class Third(Second, First): def __init__(self): print("third")
Ensuite, le MRO devient [Third, Second, First, object], et Third appellera initialement Second.__init__().
Notamment, Python applique un MRO cohérent. S'il y a des incohérences dans la chaîne d'héritage, une exception est générée pour éviter un comportement inattendu.
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!