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

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

不言
不言Original
2018-09-12 17:53:172001Durchsuche

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

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()

[f90f74cf2b5eef2157d27f4b07137685, d3d10dde313d07caf2874a0faa31cc27, 3c8ab9bdf9f4838c4d1910062f257eb2, d65e71c32c2035ca4f3e3c46100a7a5f, 0b6b3070adce8118f880cf43f8bc8037]
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: 0fe541444447db39b3382d11034c5b53 Post-Ping: 0fe541444447db39b3382d11034c5b53 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: 0fe541444447db39b3382d11034c5b53

Der dritte Aufruf ist self Die auf __mro__ basierende Methode .pong() findet die von Klasse B implementierte Pong-Methode. pong: 0fe541444447db39b3382d11034c5b53

Der vierte Aufruf ist super().pong(), das ebenfalls auf __mro__ basiert, finden Sie die von Klasse B implementierte Pong-Methode. pong: 0fe541444447db39b3382d11034c5b53

Der fünfte Aufruf ist C.pong(self), ignoriert __mro__ und findet C Die von der Klasse implementierte Pong-Methode: 0fe541444447db39b3382d11034c5b53

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!

Stellungnahme:
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