Cet article présente principalement des informations pertinentes sur la compréhension de l'héritage multiple en Python. Voici des exemples pour vous aider à apprendre et à vous référencer. Les amis dans le besoin peuvent se référer à
python Comprendre l'héritage multiple
Python, comme C++, prend en charge l'héritage multiple. Bien que le concept soit simple, la tâche difficile est que si une sous-classe appelle un attribut qui n'est pas défini par elle-même, dans quel ordre va-t-elle à la classe parent pour le trouver, en particulier lorsque de nombreuses classes parent contiennent l'attribut avec le même nom. L'ordre de recherche des attributs est différent pour les classes classiques et les classes de nouveau style. Regardons maintenant les deux performances différentes de la classe classique et de la nouvelle classe respectivement :Classe classique :
#! /usr/bin/python # -*- coding:utf-8 -*- class P1(): def foo(self): print 'p1-foo' class P2(): def foo(self): print 'p2-foo' def bar(self): print 'p2-bar' class C1(P1,P2): pass class C2(P1,P2): def bar(self): print 'C2-bar' class D(C1,C2): pass if __name__ =='__main__': d=D() d.foo() d.bar()
p1-foo p2-bar
Résumé : La méthode de recherche classique consiste à rechercher les attributs de manière "de gauche à droite, en profondeur d'abord". . d recherche d'abord s'il a une méthode foo. Sinon, il recherche si la méthode existe dans la classe parent la plus proche C1. Sinon, il continue la recherche vers le haut jusqu'à ce que la méthode soit trouvée dans P1 et la recherche se termine. .
Nouvelle classe de style :
#! /usr/bin/python # -*- coding:utf-8 -*- class P1(object): def foo(self): print 'p1-foo' class P2(object): def foo(self): print 'p2-foo' def bar(self): print 'p2-bar' class C1(P1,P2): pass class C2(P1,P2): def bar(self): print 'C2-bar' class D(C1,C2): pass if __name__ =='__main__': print D.__mro__ #只有新式类有__mro__属性,告诉查找顺序是怎样的 d=D() d.foo() d.bar()
(<class '__main__.D'>, <class '__main__.C1'>, <class '__main__.C2'>, <class '__main__.P1'>, <class '__main__.P2'>, <type 'object'>) p1-foo C2-bar
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!