Heim > Artikel > Backend-Entwicklung > Eingehende Analyse der Mehrfachvererbung in Python
In diesem Artikel werden hauptsächlich relevante Informationen zum Verständnis der Mehrfachvererbung in Python vorgestellt. Hier finden Sie Beispiele, die Ihnen beim Lernen und Nachschlagen helfen können >Python Mehrfachvererbung verstehen
Python unterstützt wie C++ die Mehrfachvererbung. Obwohl das Konzept einfach ist, besteht die schwierige Aufgabe darin, wenn eine Unterklasse ein Attribut aufruft, das nicht von ihr selbst definiert ist, in welcher Reihenfolge sie zur übergeordneten Klasse geht, um es zu finden, insbesondere wenn viele der übergeordneten Klassen das gleiche Attribut enthalten Name.
Die Suchreihenfolge der Attribute ist für klassische Klassen und Klassen im neuen Stil unterschiedlich. Schauen wir uns nun die beiden unterschiedlichen Leistungen der klassischen Klasse bzw. der neuen Klasse an:Klassische Klasse:
Ausführung Das Ergebnis:
#! /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()
Zeichnen Sie zum besseren Verständnis ein Bild des Codebeispiels:
p1-foo p2-bar
From oben Gemessen an den Ausgabeergebnissen der klassischen Klasse
wenn Instanz d foo() aufruft, ist die Suchreihenfolge D => C1 => P1, wenn Instanz d bar() aufruft , die Suchreihenfolge ist D => C1 => P2Zusammenfassung: Die klassische Suchmethode besteht darin, Attribute „von links nach rechts, Tiefe zuerst“ zu finden . d sucht zunächst, ob es eine foo-Methode gibt. Wenn nicht, sucht es, ob die Methode in der nächsten übergeordneten Klasse C1 vorhanden ist. Wenn nicht, wird die Suche fortgesetzt, bis die Methode in P1 gefunden wird .
Neue Stilklasse:
Ausführungsergebnis:
#! /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()
Den Ausgabeergebnissen der neuen Klasse oben nach zu urteilen, lautet die Suchreihenfolge, wenn
(<class '__main__.D'>, <class '__main__.C1'>, <class '__main__.C2'>, <class '__main__.P1'>, <class '__main__.P2'>, <type 'object'>) p1-foo C2-barfoo() aufruft: D => ; P1Wenn Instanz d bar() aufruft, lautet die Suchreihenfolge D => C1 => Verwenden Sie die Methode „Breite zuerst“, um nach Immobilien zu suchen.
Das obige ist der detaillierte Inhalt vonEingehende Analyse der Mehrfachvererbung in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!