logo

Python super()

In Python wird die Funktion super() verwendet, um auf die übergeordnete Klasse oder Superklasse zu verweisen. Sie können damit in der Oberklasse definierte Methoden aus der Unterklasse aufrufen und so die von der übergeordneten Klasse geerbten Funktionen erweitern und anpassen.

Was sind 10 von 1 Million?

Syntax von super() in Python

Syntax: super()



Zurückkehren : Gibt ein Proxy-Objekt zurück, das die übergeordnete Klasse darstellt.

super()-Funktion im Python-Beispiel

Im gegebenen Beispiel ist The Emp Klasse hat eine __heiß__ Methode, die die initialisiert Ausweis , Und Name Und Fügt hinzu Attribute. Der Freiberuflich Klasse erbt von der Emp Klasse und fügt ein zusätzliches Attribut namens hinzu E-Mails. Es ruft die __init__-Methode super() der übergeordneten Klasse auf, um das geerbte Attribut zu initialisieren.

Python3








class> Emp():> >def> __init__(>self>,>id>, name, Add):> >self>.>id> => id> >self>.name>=> name> >self>.Add>=> Add> # Class freelancer inherits EMP> class> Freelance(Emp):> >def> __init__(>self>,>id>, name, Add, Emails):> >super>().__init__(>id>, name, Add)> >self>.Emails>=> Emails> Emp_1>=> Freelance(>103>,>'Suraj kr gupta'>,>'Noida'> ,>'KKK@gmails'>)> print>(>'The ID is:'>, Emp_1.>id>)> print>(>'The Name is:'>, Emp_1.name)> print>(>'The Address is:'>, Emp_1.Add)> print>(>'The Emails is:'>, Emp_1.Emails)>

>

>

Ausgabe :

The ID is: 103 The Name is: Suraj kr gupta The Address is: Noida The Emails is: KKK@gmails>

Wofür wird die super()-Methode verwendet?

Eine Methode einer übergeordneten Klasse kann in Python mit der Funktion super() aufgerufen werden. Es ist eine typische Praxis in Objekt orientierte Programmierung um die Methoden der Oberklasse aufzurufen und das Überschreiben und Vererben von Methoden zu ermöglichen. Selbst wenn die aktuelle Klasse diese Methoden durch ihre eigene Implementierung ersetzt hat, können Sie durch den Aufruf von super() auf die Methoden der übergeordneten Klasse zugreifen und diese verwenden. Auf diese Weise können Sie das Verhalten der übergeordneten Klasse verbessern und ändern und gleichzeitig davon profitieren.

Vorteile der Superfunktion

  • Sie müssen sich den Namen der übergeordneten Klasse nicht merken oder angeben, um auf ihre Methoden zuzugreifen. Diese Funktion kann sowohl bei Einfach- als auch bei Mehrfachvererbungen verwendet werden.
  • Dies implementiert Modularität (Isolierung von Änderungen) und Wiederverwendbarkeit des Codes, da nicht die gesamte Funktion neu geschrieben werden muss.
  • Die Superfunktion in Python wird dynamisch aufgerufen, da Python im Gegensatz zu anderen Sprachen eine dynamische Sprache ist.

Wie funktioniert Vererbung ohne Python Super?

Im gegebenen Beispiel liegt ein Problem mit der __init__-Methode der Emp-Klasse vor. Die Emp-Klasse ist von der Person-Klasse geerbt, ruft jedoch in ihrer __init__-Methode nicht die __init__-Methode der übergeordneten Klasse auf, um die Namens- und ID-Attribute zu initialisieren.

Python3




# code> class> Person:> ># Constructor> >def> __init__(>self>, name,>id>):> >self>.name>=> name> >self>.>id> => id> ># To check if this person is an employee> >def> Display(>self>):> >print>(>self>.name,>self>.>id>)> > class> Emp(Person):> > >def> __init__(>self>, name,>id>):> >self>.name_>=> name> >def> Print>(>self>):> >print>(>'Emp class called'>)> Emp_details>=> Emp(>'Mayank'>,>103>)> # calling parent class function> Emp_details.name_, Emp_details.name>

>

>

Ausgabe :

--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in 24 25 # calling parent class function --->26 Emp_details.name_, Emp_details.name AttributeError: Das Objekt „Emp“ hat kein Attribut „Name“> 

Behebung des oben genannten Problems mit Super in Python

Im bereitgestellten Code erbt die Emp-Klasse korrekt von der Person-Klasse und die __init__-Methode der Emp-Klasse ruft jetzt ordnungsgemäß die __init__-Methode der übergeordneten Klasse mithilfe von super() in Python auf.

Python3




Maschinelles Lernen und Typen
# code> # A Python program to demonstrate inheritance> class> Person:> ># Constructor> >def> __init__(>self>, name,>id>):> >self>.name>=> name> >self>.>id> => id> ># To check if this person is an employee> >def> Display(>self>):> >print>(>self>.name,>self>.>id>)> > class> Emp(Person):> > >def> __init__(>self>, name,>id>):> >self>.name_>=> name> >super>().__init__(name,>id>)> >def> Print>(>self>):> >print>(>'Emp class called'>)> Emp_details>=> Emp(>'Mayank'>,>103>)> # calling parent class function> print>(Emp_details.name_, Emp_details.name)>

>

Ausgabe :

Mayank Mayank>

Python super() mit __init__()-Methoden verstehen

Python verfügt über eine reservierte Methode namens __init__. In der objektorientierten Programmierung wird er als Konstruktor bezeichnet. Wenn diese Methode aufgerufen wird, ermöglicht sie der Klasse, die Attribute der Klasse zu initialisieren. In einer geerbten Unterklasse kann mit der Funktion super() auf eine übergeordnete Klasse verwiesen werden. Die Superfunktion gibt ein temporäres Objekt der Superklasse zurück, das der untergeordneten Klasse den Zugriff auf alle ihre Methoden ermöglicht.

Notiz: Weitere Informationen finden Sie unter Vererbung in Python .

Superfunktion mit Einzelvererbung

Nehmen wir das Beispiel der Tiere. Hunde, Katzen und Kühe gehören zu den Tieren. Sie haben auch gemeinsame Merkmale wie –

  • Sie sind Säugetiere.
  • Sie haben einen Schwanz und vier Beine.
  • Es sind Haustiere.

Die Klassen Hunde, Katzen und Pferde sind also eine Unterklasse der Tierklasse. Dies ist ein Beispiel für eine einzelne Vererbung, da viele Unterklassen von einer einzigen übergeordneten Klasse geerbt werden.

Python3




# Python program to demonstrate> # super function> class> Animals:> ># Initializing constructor> >def> __init__(>self>):> >self>.legs>=> 4> >self>.domestic>=> True> >self>.tail>=> True> >self>.mammals>=> True> >def> isMammal(>self>):> >if> self>.mammals:> >print>(>'It is a mammal.'>)> >def> isDomestic(>self>):> >if> self>.domestic:> >print>(>'It is a domestic animal.'>)> class> Dogs(Animals):> >def> __init__(>self>):> >super>().__init__()> >def> isMammal(>self>):> >super>().isMammal()> class> Horses(Animals):> >def> __init__(>self>):> >super>().__init__()> >def> hasTailandLegs(>self>):> >if> self>.tail>and> self>.legs>=>=> 4>:> >print>(>'Has legs and tail'>)> # Driver code> Tom>=> Dogs()> Tom.isMammal()> Bruno>=> Horses()> Bruno.hasTailandLegs()>

>

Abschlag durchgestrichen

>

Ausgabe :

It is a mammal. Has legs and tail>

Super mit Mehrfachvererbungen

Nehmen wir noch einen Beispiel einer Superfunktion , Angenommen, eine Klasse kann fliegen Und kann schwimmen erben von einer Säugetierklasse und diese Klassen werden von der Tierklasse geerbt. Die Tierklasse erbt also von den mehreren Basisklassen. Sehen wir uns die Verwendung von an Python Super mit Argumenten in diesem Fall.

Python3




class> Mammal():> >def> __init__(>self>, name):> >print>(name,>'Is a mammal'>)> class> canFly(Mammal):> >def> __init__(>self>, canFly_name):> >print>(canFly_name,>'cannot fly'>)> ># Calling Parent class> ># Constructor> >super>().__init__(canFly_name)> class> canSwim(Mammal):> >def> __init__(>self>, canSwim_name):> >print>(canSwim_name,>'cannot swim'>)> >super>().__init__(canSwim_name)> class> Animal(canFly, canSwim):> >def> __init__(>self>, name):> >super>().__init__(name)> # Driver Code> Carol>=> Animal(>'Dog'>)>

>

>

Ausgabe :

Die Klasse Animal erbt von zwei übergeordneten Klassen – canFly und canSwim. Daher kann die Unterklasseninstanz Carol auf beide Konstruktoren der übergeordneten Klasse zugreifen.

Dog cannot fly Dog cannot swim Dog Is a mammal>

Super mit mehrstufiger Vererbung

Nehmen wir noch einen Beispiel einer Superfunktion Angenommen, eine Klasse, die schwimmen kann, wird von canFly geerbt, und canFly stammt von der Säugetierklasse. Die Säugetierklasse erbt also von der mehrstufigen Vererbung. Sehen wir uns die Verwendung von an Python Super mit Argumenten in diesem Fall.

Python3




class> Mammal():> >def> __init__(>self>, name):> >print>(name,>'Is a mammal'>)> class> canFly(Mammal):> >def> __init__(>self>, canFly_name):> >print>(canFly_name,>'cannot fly'>)> ># Calling Parent class> ># Constructor> >super>().__init__(canFly_name)> class> canSwim(canFly):> >def> __init__(>self>, canSwim_name):> >print>(canSwim_name,>'cannot swim'>)> >super>().__init__(canSwim_name)> class> Animal(canSwim):> >def> __init__(>self>, name):> ># Calling the constructor> ># of both the parent> ># class in the order of> ># their inheritance> >super>().__init__(name)> # Driver Code> Carol>=> Animal(>'Dog'>)>

>

>

Ausgabe :

Dog cannot swim Dog cannot fly Dog Is a mammal>

Python-Mehrfachvererbung und MRO

Im gegebenen Beispiel erbt Klasse C von den Klassen A und B und überschreibt die Methode age(). In der age()-Methode der Klasse C ruft die Zeile super(C, self).age() jedoch die age()-Methode der nächsten Klasse im MRO auf. In diesem Fall wird die Methode age() aus Klasse A aufgerufen, da sie im MRO vor Klasse B erscheint.

Python3




class> A:> >def> age(>self>):> >print>(>'Age is 21'>)> class> B:> >def> age(>self>):> >print>(>'Age is 23'>)> class> C(A, B):> >def> age(>self>):> >super>(C,>self>).age()> > c>=> C()> print>(C.__mro__)> print>(C.mro())>

>

SQL-Klauseln
>

Ausgabe :

(, , , ) [, , , ]>