logo

Python super()

În Python, funcția super() este folosită pentru a se referi la clasa părinte sau superclasa. Vă permite să apelați metode definite în superclasă din subclasă, permițându-vă să extindeți și să personalizați funcționalitatea moștenită de la clasa părinte.

Sintaxa super() în Python

Sintaxă: super()



Întoarcere : Returnează un obiect proxy care reprezintă clasa părintelui.

funcția super() în exemplul Python

În exemplul dat, The Emp clasa are o __Fierbinte__ metoda care inițializează id , și Nume și Adaugă atribute. The Independent clasa moşteneşte de la Emp clasa și adaugă un atribut suplimentar numit E-mailuri. Apelează metoda super() __init__ a clasei părinte pentru a inițializa atributul moștenit.

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

>

>

Ieșire:

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

Pentru ce este folosită metoda super ()?

O metodă dintr-o clasă părinte poate fi apelată în Python folosind funcția super(). Este o practică tipică în programare orientată pe obiecte pentru a apela metodele superclasei și pentru a activa suprascrierea și moștenirea metodei. Chiar dacă clasa curentă a înlocuit acele metode cu propria sa implementare, apelarea super() vă permite să accesați și să utilizați metodele clasei părinte. Făcând acest lucru, puteți îmbunătăți și modifica comportamentul clasei părinte, în timp ce câștigați din aceasta.

Beneficiile superfuncției

  • Nu trebuie să vă amintiți sau să specificați numele clasei părinte pentru a accesa metodele acesteia. Această funcție poate fi utilizată atât în ​​moșteniri unice, cât și în moșteniri multiple.
  • Aceasta implementează modularitatea (izolarea modificărilor) și reutilizarea codului, deoarece nu este nevoie să rescrieți întreaga funcție.
  • Superfuncția din Python este numită dinamic deoarece Python este un limbaj dinamic, spre deosebire de alte limbi.

Cum funcționează Moștenirea fără Python super?

În exemplul dat, există o problemă cu metoda __init__ a clasei Emp. Clasa Emp este moștenită din clasa Person, dar în metoda sa __init__, nu apelează metoda __init__ a clasei părinte pentru a inițializa atributele nume și id.

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>

>

>

Ieșire:

--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in 24 25 # calling parent class function --->26 Emp_details.name_, Emp_details.name AttributeError: obiectul 'Emp' nu are atributul 'name'>

Remedierea problemei de mai sus cu Super în Python

În codul furnizat, clasa Emp moștenește corect de la clasa Person, iar metoda __init__ a clasei Emp apelează acum corect metoda __init__ a clasei părinte folosind super() în Python.

Python3




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

>

>

Ieșire:

Mayank Mayank>

Înțelegerea Python super() cu metodele __init__().

Python are o metodă rezervată numită __init__. În programarea orientată pe obiecte, este denumit constructor. Când această metodă este numită, permite clasei să inițializeze atributele clasei. Într-o subclasă moștenită, se poate face referire la o clasă părinte cu ajutorul funcției super(). Superfuncția returnează un obiect temporar al superclasei care permite accesul la toate metodele sale către clasa sa fii.

Notă: Pentru mai multe informații, consultați Moștenirea în Python .

șir în întreg java

Superfuncție cu moștenire unică

Să luăm exemplul animalelor. Câinii, pisicile și vacile fac parte din animale. De asemenea, au caracteristici comune precum -

  • Sunt mamifere.
  • Au o coadă și patru picioare.
  • Sunt animale domestice.

Deci, clasele câini, pisici și cai sunt o subclasă a clasei de animale. Acesta este un exemplu de moștenire unică, deoarece multe subclase sunt moștenite de la o clasă cu un singur părinte.

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

>

>

Ieșire:

It is a mammal. Has legs and tail>

Super cu moșteniri multiple

Să luăm altul exemplu de superfuncție , Să presupunem o clasă Pot zbura și poate înota moștenesc de la o clasă de mamifere și aceste clase sunt moștenite de clasa animală. Deci, clasa animal moștenește din mai multe clase de bază. Să vedem utilizarea Piton super cu argumente în acest caz.

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

>

>

Ieșire:

Clasa Animal moștenește din clasele cu doi părinți – canFly și canSwim. Deci, instanța de subclasă Carol poate accesa ambii constructori ai clasei părinte.

Dog cannot fly Dog cannot swim Dog Is a mammal>

Super cu moștenire pe mai multe niveluri

Să luăm altul exemplu de superfuncție , să presupunem că o clasă care poate înota este moștenită de canFly, canFly din clasa mamiferelor. Deci, clasa de mamifere moștenește din moștenirea Multi-Level. Să vedem utilizarea Piton super cu argumente în acest caz.

Python3




sortați o matrice java

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

>

>

Ieșire:

Dog cannot swim Dog cannot fly Dog Is a mammal>

Moștenire multiplă Python și MRO

În exemplul dat, clasa C moștenește din clasele A și B și suprascrie metoda age(). Totuși, în metoda age() din clasa C, linia super(C, self).age() invocă metoda age() din clasa următoare din MRO. În acest caz, va invoca metoda age() din clasa A, deoarece apare înaintea clasei B în MRO.

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

>

>

Ieșire:

(, , , ) [, , , ]>