Python super()-Funktion

Python 内置函数Python Built-in-Funktionen


Beschreibung

super()Die Funktion wird verwendet, um eine Methode der Elternklasse (Superklasse) aufzurufen.

super()Sie wird verwendet, um Probleme bei Mehrfachvererbung zu lösen. Das direkte Aufrufen einer Methode der Elternklasse mit dem Klassennamen ist bei Einfachvererbung in Ordnung, aber bei Mehrfachvererbung bringt es verschiedene Probleme mit sich, wie Method Resolution Order (MRO), wiederholte Aufrufe (Diamantvererbung) usw.

MRO ist die Method-Resolution-Order-Tabelle einer Klasse, die eigentlich die Reihenfolgetabelle ist, die beim Vererben von Methoden der Elternklasse verwendet wird.

Syntax

Das Folgende ist die Syntax der super()-Methode:

super(type[, object-or-type])

Parameters

  • type -- Klasse.
  • object-or-type -- Klasse, normalerweise self

Ein Unterschied zwischen Python3.x und Python2.x ist: Python 3 kann direktsuper().xxxanstelle vonsuper(Class, self).xxx verwenden :

Python3.x-Beispiel:

class A: def add(self, x): y = x+1 print(y) class B(A): def add(self, x): super().add(x) b = B() b.add(2) # 3

Python2.x-Beispiel:

#!/usr/bin/python # -*- coding: UTF-8 -*- class A(object): # Python2.x daran denken, object zu erben def add(self, x): y = x+1 print(y) class B(A): def add(self, x): super(B, self).add(x) b = B() b.add(2) # 3

Rückgabewert

Keine.


Beispiel

Das Folgende zeigt ein Beispiel für die Verwendung der super-Funktion:

Beispiel

#!/usr/bin/python # -*- coding: UTF-8 -*- class FooParent(object): def __init__(self): self.parent = 'I\'m the parent.' print ('Parent') def bar(self,message): print ("%s von Parent" % message) class FooChild(FooParent): def __init__(self): # super(FooChild,self) findet zuerst die Elternklasse von FooChild (das ist die Klasse FooParent), dann konvertiert es das Objekt der Klasse FooChild in ein Objekt der Klasse FooParent super(FooChild,self).__init__() print ('Child') def bar(self,message): super(FooChild, self).bar(message) print ('Child bar Funktion') print (self.parent) if __name__ == '__main__': fooChild = FooChild() fooChild.bar('HelloWorld')

Ausführungsergebnis:

Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.

Python 内置函数Python Built-in-Funktionen

Andere Erweiterungen