Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Klassenvererbung in Python anhand von Beispielen

Ausführliche Erläuterung der Klassenvererbung in Python anhand von Beispielen

Y2J
Y2JOriginal
2017-04-28 09:27:021204Durchsuche

In diesem Artikel werden hauptsächlich relevante Informationen zu detaillierten Beispielen für die Vererbung von Python-Klassen vorgestellt. Freunde, die sie benötigen, können auf

Vererbung von Python-Klassen

für viele Artikel verweisen Bei der Erläuterung der Vererbung von Python-Klassen sprechen die meisten von ihnen über Konzepte wie Oop und Polymorphismus. Es ist möglicherweise nicht so hilfreich, den in verschiedenen Situationen geschriebenen Code zu verwenden Auswirkung der Ausführung des Codes für eine bestimmte Codesituation. Dies kann für Entwickler hilfreicher sein. Reden Sie keinen Unsinn, sondern gehen Sie direkt zum Code über.

Es gibt keinen Unterschied zwischen klassischen Klassen und Klassen neuen Stils. Die folgende Analyse gilt sowohl für Klassen neuen Stils als auch für klassische Klassen.

Für die Funktion __init__ Die Klasse ist nur eine Initialisierung. Es handelt sich um eine aufgerufene Funktion (ps: Initialisierung und Instanzerstellung sind kein Prozess, die Erstellung der Instanz wird durch eine Erstellungsfunktion abgeschlossen), wenn keine explizite Deklaration der Funktion __init__ in der Klasse vorhanden ist Unterklasse, die Unterklasse ruft die Funktion __init__ der übergeordneten Klasse auf, die Funktion __init__ in der übergeordneten Klasse wird jedoch nicht erneut aufgerufen. Wenn die Funktion __init__ explizit deklariert wird, wird die Initialisierung der übergeordneten Klasse nicht aufgerufen Während der Initialisierung der Unterklasse wird nur die in der Unterklasse deklarierte Funktion __init__ aufgerufen. Gleichzeitig werden in der Unterklasseninstanz keine Attribute deklariert :

Das Ergebnis der Ausführung zu diesem Zeitpunkt ist
class animal():
 name="hh"
 sex="man"
 def __init__(self):
  self.height=10
  self.weight=50
 def deception(self):
  print "ansible.height:"+self.height+" animal.weight:"+self.weight
 def run(self):
  print "animal is running...."
class dog(animal):
 def __init__(self):
  pass
if __name__=="__main__":
 dg=dog()
 print dg.__dict__

{}

Wenn die Hundeklasse wie folgt geändert wird (ps: Es wird keine __init__-Deklaration angezeigt) Methode zu diesem Zeitpunkt):

Zu diesem Zeitpunkt ist das Ergebnis aufgrund des direkten Aufrufs der __init__-Methode des übergeordneten Klassentiers wie folgt:
class dog(animal):
 def run(self):
  print "dog is running..."

If Eine Klasse erbt zu diesem Zeitpunkt die Hundeklasse. Was passiert zu diesem Zeitpunkt? (Der Python-Interpreter sucht zunächst in der Unterklasse nach der Methode __init__. Wenn sie nicht gefunden wird, sucht er dann in der übergeordneten Klasse danach, bis sie gefunden wird, und führt sie aus. Die Methode __init__ der übergeordneten Klasse wird nicht mehr ausgeführt die übergeordnete Klasse. Zu diesem Zeitpunkt wurden in der __init__-Methode keine Attribute erstellt, die nicht ausgeführt wurden. Im obigen Beispiel verfügt das bei der ersten Ausführung erhaltene Beispiel beispielsweise nicht über die Attribute „Gewicht“ und „Höhe“. >
{'weight': 50, 'height': 10}

Das Ergebnis ist zu diesem Zeitpunkt das Gleiche:

class animal():
 name="hh"
 sex=""
 def __init__(self):
  self.height=10
  self.weight=50
 def deception(self):
  print "ansible.height:"+self.height+" animal.weight:"+self.weight
 def run(self):
  print "animal is running...."
class dog(animal):
 def __init__(self):
  pass
 def run(self):
  print "dog is running..."
class jinmao(dog):
 # def __init__(self):
 #  self.ji="jinmao"
 pass
if __name__=="__main__":
 dg=jinmao()
 print dg.__dict__
{}

Was passiert bei der Mehrfachvererbung einer Klasse? (Bei der Mehrfachvererbung wird die __init__-Funktion in der übergeordneten Klasse ausgeführt, die durch den ersten Parameter im Vererbungsparameter der Klasse deklariert wird. Wenn in der übergeordneten Klasse keine __init__-Funktion vorhanden ist, suchen Sie weiter, um festzustellen, ob eine vorhanden ist Wenn die übergeordnete Klasse gefunden wird oder nicht, wird der Prozess verwendet. Der Code ist nicht initialisiert. Sie können ihn anhand des vorherigen Beispiels selbst testen.

Die Verwendung und Eigenschaften von Super zum Aufrufen von Methoden in übergeordneten Klassen in Unterklassen.


Zusammenfassung:

Wenn Sie wissen möchten, wie die virtuelle Python-Maschine eine Klasse erstellt (insbesondere beim Laden einer .pyc-Datei, wie diese durch die Codelogik der verarbeitet wird). C-Klassenobjekte werden in einem Stück Speicher abgelegt. Ich hoffe, wir können diesen Aspekt gemeinsam erforschen

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Klassenvererbung in Python anhand von Beispielen. 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