Heim > Backend-Entwicklung > Python-Tutorial > Eine kurze Erklärung der Python-Vererbung und Mehrfachvererbung (Codebeispiel)

Eine kurze Erklärung der Python-Vererbung und Mehrfachvererbung (Codebeispiel)

不言
Freigeben: 2018-09-12 17:53:17
Original
2060 Leute haben es durchsucht

Was dieser Artikel Ihnen bietet, ist eine einfache Erklärung (Codebeispiel) der Python-Vererbung. Er hat einen gewissen Referenzwert. Ich hoffe, er wird Ihnen hilfreich sein.

Beachten Sie Folgendes:

Das direkte Unterklassifizieren integrierter Typen (z. B. dict, list oder str) ist fehleranfällig, da Methoden integrierter Typen normalerweise vom Benutzer überschriebene Methoden ignorieren und erstellen Sie keine Unterklassen. Benutzerdefinierte Klassen sollten beim Klassifizieren integrierter Typen das Sammlungsmodul erben.

    def __setitem__(self, key, value):
        super().__setitem__(key, [value] * 2) # 错误案例
class AnswerDict(dict):
    def __getitem__(self, item): # 错误案例
        return 42
import collections
class DoppelDict2(collections.UserDict): # 正确案例
    def __setitem__(self, key, value):
        super().__setitem__(key, [value] * 2)
class AnswerDict2(collections.UserDict): # 正确案例
    def __getitem__(self, item):
        return 42
Nach dem Login kopieren

Ein weiteres Problem im Zusammenhang mit der Mehrfachvererbung ist: Wenn eine Oberklasse derselben Ebene ein Attribut mit demselben Namen definiert, wie kann Python welches verwenden? Methode wird aufgerufen, durch Methodenanalysereihenfolge

>>> D.mro()

[, , , , ]
Wenn Sie Methodenaufrufe an die Superklasse delegieren möchten, empfiehlt sich die Verwendung von integrierte super( )-Funktion.

Das Folgende ist die Interpretation der d.pingpong()-Methode

>>> self.ping()

Ping: <__main__.D Objekt bei 0x000002213877F2B0> Post-Ping: <__main__.D Objekt bei 0x000002213877F2B0> Der erste Aufruf ist self.ping(), der die Ping-Methode der Klasse D ausführt zweiter Aufruf Der eine ist super().ping(), überspringen Sie die Ping-Methode von Klasse D und suchen Sie die Ping-Methode von Klasse A. Ping: <__main__.D Objekt bei 0x000002213877F2B0>

Der dritte Aufruf ist self Die auf __mro__ basierende Methode .pong() findet die von Klasse B implementierte Pong-Methode. pong: <__main__.D Objekt bei 0x000002213877F2B0>

Der vierte Aufruf ist super().pong(), das ebenfalls auf __mro__ basiert, finden Sie die von Klasse B implementierte Pong-Methode. pong: <__main__.D Objekt bei 0x000002213877F2B0>

Der fünfte Aufruf ist C.pong(self), ignoriert __mro__ und findet C Die von der Klasse implementierte Pong-Methode: <__main__.D Objekt bei 0x000002213877F2B0>

Verwandte Empfehlungen:

Einzelvererbung und Mehrfachvererbung in Python

Erklärung von Python-Klassen und Vererbung

Das obige ist der detaillierte Inhalt vonEine kurze Erklärung der Python-Vererbung und Mehrfachvererbung (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage