Python , funkcija super() naudojama pirminei klasei arba superklasei nurodyti. Tai leidžia iš poklasio iškviesti superklasėje apibrėžtus metodus, leidžiančius išplėsti ir pritaikyti iš pirminės klasės paveldėtas funkcijas.
Super() sintaksė Python
Sintaksė: super ()
Grąžinti: Grąžina tarpinio serverio objektą, kuris atstovauja pirminės klasės klasę.
funkcija super() Python pavyzdyje
Pateiktame pavyzdyje The Emp klasėje yra __karšta__ metodas, kuris inicijuoja id , ir vardas ir Prideda atributai. The Laisvai samdomas klasė paveldi iš Emp klasę ir prideda papildomą atributą, vadinamą Laiškai. Jis iškviečia pirminės klasės __init__ metodą super(), kad inicijuotų paveldėtą atributą.
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)> |
kas yra modulo c++
>
>
Išvestis:
The ID is: 103 The Name is: Suraj kr gupta The Address is: Noida The Emails is: KKK@gmails>
Kam naudojamas super () metodas?
Pirminės klasės metodą galima iškviesti Python naudojant funkciją super(). Tai tipiška praktika Objektinis programavimas iškviesti superklasės metodus ir įjungti metodų nepaisymą ir paveldėjimą. Net jei dabartinė klasė pakeitė tuos metodus savo įgyvendinimu, iškvietus super() galite pasiekti ir naudoti pirminės klasės metodus. Tai darydami galite sustiprinti ir modifikuoti tėvų klasės elgesį, o iš to vis tiek gausite naudos.
Super Function pranašumai
- Norint pasiekti jos metodus, nereikia prisiminti ar nurodyti pirminės klasės pavadinimo. Šią funkciją galima naudoti tiek pavieniui, tiek daugkartiniam paveldėjimui.
- Tai įgyvendina moduliškumą (pakeitimų išskyrimą) ir kodo pakartotinį naudojimą, nes nereikia perrašyti visos funkcijos.
- Python super funkcija vadinama dinamiškai, nes Python yra dinamiška kalba, skirtingai nuo kitų kalbų.
Kaip paveldėjimas veikia be Python super?
Pateiktame pavyzdyje yra problema, susijusi su Emp klasės __init__ metodu. Emp klasė yra paveldėta iš Asmens klasės, tačiau jos __init__ metodu ji neiškviečia pagrindinės klasės __init__ metodo, kad inicijuotų pavadinimą ir ID atributus.
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> |
python sąrašo inicijavimas
>
>
Išvestis:
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in 24 25 # calling parent class function --->26 Emp_details.name_, Emp_details.name AtributeError: 'Emp' objektas neturi atributo 'name'>
Aukščiau pateiktos problemos sprendimas naudojant „Super“ programoje Python
Pateiktame kode Emp klasė teisingai paveldi iš Asmens klasės, o Emp klasės __init__ metodas dabar tinkamai iškviečia pagrindinės klasės __init__ metodą, naudodamas super() 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)> |
>
>
Išvestis:
Mayank Mayank>
Python super() supratimas naudojant __init__() metodus
Python turi rezervuotą metodą, vadinamą __init__. Objektiniame programavime jis vadinamas konstruktoriumi. Kai vadinamas šis metodas, jis leidžia klasei inicijuoti klasės atributus. Paveldėtame poklasyje pirminė klasė gali būti nurodyta naudojant funkciją super(). Superfunkcija grąžina laikiną superklasės objektą, kuris suteikia prieigą prie visų jos metodų savo antrinei klasei.
Pastaba: Norėdami gauti daugiau informacijos, žr Paveldėjimas Python .
Super funkcija su vienu paveldėjimu
Imkime gyvūnų pavyzdį. Šunys, katės ir karvės yra gyvūnų dalis. Jie taip pat turi bendrų savybių, tokių kaip -
- Jie yra žinduoliai.
- Jie turi uodegą ir keturias kojas.
- Jie yra naminiai gyvūnai.
Taigi šunų, kačių ir arklių klasės yra gyvūnų klasės poklasis. Tai yra vieno paveldėjimo pavyzdys, nes daugelis poklasių yra paveldimi iš vienos pirminės klasės.
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()> |
>
java tipo konvertavimas ir liejimas
>
Išvestis:
It is a mammal. Has legs and tail>
Super su keliais paveldėjimais
Imkime kitą super funkcijos pavyzdys , Tarkime, klasė gali skristi ir galiu plaukti paveldi iš žinduolių klasės, o šias klases paveldi gyvūnų klasė. Taigi gyvūnų klasė paveldima iš kelių bazinių klasių. Pažiūrėkime, kaip naudoti Python super su argumentais tokiu atveju.
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'>)> |
c++ suskaidyta eilutė
>
>
Išvestis:
Klasė Animal paveldima iš dviejų tėvų klasių – canFly ir canSwim. Taigi, poklasio egzempliorius Carol gali pasiekti abu pirminės klasės konstruktorius.
Dog cannot fly Dog cannot swim Dog Is a mammal>
Super su kelių lygių paveldėjimu
Imkime kitą super funkcijos pavyzdys , tarkime, kad gali plaukti klasė yra paveldėta canFly, canFly iš žinduolių klasės. Taigi žinduolių klasė paveldi iš kelių lygių paveldėjimo. Pažiūrėkime, kaip naudoti Python super su argumentais tokiu atveju.
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'>)> |
>
>
Išvestis:
Dog cannot swim Dog cannot fly Dog Is a mammal>
Python daugialypis paveldėjimas ir MRO
Pateiktame pavyzdyje C klasė paveldima iš A ir B klasių ir nepaiso amžiaus() metodo. Tačiau C klasės metodo age() eilutėje super(C, self).age() iškviečiamas metodas age() iš kitos klasės MRO. Tokiu atveju jis iškvies A klasės metodą age(), nes MRO jis yra prieš B klasę.
medžio žemėlapis
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())> |
>
>
Išvestis:
(, , , ) [, , , ]>