logo

Python super()

I Python brukes super()-funksjonen for å referere til overordnet klasse eller superklasse. Den lar deg kalle metoder definert i superklassen fra underklassen, slik at du kan utvide og tilpasse funksjonaliteten som er arvet fra den overordnede klassen.

Syntaks for super() i Python

Syntaks: super()



Komme tilbake : Returner et proxy-objekt som representerer forelderens klasse.

super() funksjon i Python Eksempel

I det gitte eksemplet, The Emp klasse har en __varmt__ metode som initialiserer id , og Navn og Legger til attributter. De Frilans klasse arver fra Emp klasse og legger til et ekstra attributt kalt E-poster. Den kaller foreldreklassens __init__-metode super() for å initialisere det arvede attributtet.

Python3








arraylist sortert java
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)>

>

>

Utgang:

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

Hva brukes super()-metoden til?

En metode fra en overordnet klasse kan kalles i Python ved å bruke super()-funksjonen. Det er typisk praksis i Objektorientert programmering å kalle metodene til superklassen og aktivere metodeoverstyring og arv. Selv om den nåværende klassen har erstattet disse metodene med sin egen implementering, lar det å kalle super() deg få tilgang til og bruke den overordnede klassens metoder. Ved å gjøre dette kan du forbedre og modifisere foreldreklassens oppførsel mens du fortsatt tjener på det.

Fordeler med superfunksjon

  • Trenger ikke huske eller spesifisere overordnet klassenavn for å få tilgang til metodene. Denne funksjonen kan brukes både i enkelt og flere arv.
  • Dette implementerer modularitet (isolerer endringer) og kodegjenbrukbarhet da det ikke er behov for å omskrive hele funksjonen.
  • Superfunksjonen i Python kalles dynamisk fordi Python er et dynamisk språk, i motsetning til andre språk.

Hvordan fungerer arv uten Python super?

I det gitte eksemplet er det et problem med Emp-klassens __init__-metode. Emp-klassen er arvet fra Person-klassen, men i dens __init__-metode kaller den ikke foreldreklassens __init__-metode for å initialisere navn og id-attributter.

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>

>

>

Utgang:

--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in 24 25 # calling parent class function --->26 Emp_details.name_, Emp_details.name AttributeError: 'Emp' objekt har ingen attributt 'name'>

Løser problemet ovenfor med Super i Python

I den medfølgende koden arver Emp-klassen riktig fra Person-klassen, og Emp-klassens __init__-metode kaller nå den overordnede klassens __init__-metode ved å bruke super() i 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)>

>

>

Utgang:

Mayank Mayank>

Forstå Python super() med __init__() metoder

Python har en reservert metode kalt __init__. I objektorientert programmering blir det referert til som en konstruktør. Når denne metoden kalles, lar den klassen initialisere attributtene til klassen. I en arvet underklasse kan en overordnet klasse refereres til ved bruk av super()-funksjonen. Superfunksjonen returnerer et midlertidig objekt av superklassen som gir tilgang til alle metodene til dens underordnede klasse.

Merk: For mer informasjon, se Arv i Python .

Super funksjon med Single Inheritance

La oss ta eksemplet med dyr. Hunder, katter og kyr er en del av dyr. De deler også vanlige egenskaper som -

css-kanten
  • De er pattedyr.
  • De har en hale og fire ben.
  • De er husdyr.

Så, klassene hunder, katter og hester er en underklasse av dyreklassen. Dette er et eksempel på enkeltarv fordi mange underklasser er arvet fra en enkeltforelderklasse.

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

>

>

Utgang:

It is a mammal. Has legs and tail>

Super med flere arv

La oss ta en annen eksempel på en superfunksjon , Anta en klasse kan fly og kan svømme arver fra en pattedyrklasse og disse klassene er arvet av dyreklassen. Så dyreklassen arver fra de flere basisklassene. La oss se bruken av Python super med argumenter i dette tilfellet.

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

hvordan gi nytt navn til en katalog i linux

>

>

Utgang:

Klassen Dyr arver fra toforeldreklasser – canFly og canSwim. Så underklasseforekomsten Carol kan få tilgang til begge de overordnede klassekonstruktørene.

Dog cannot fly Dog cannot swim Dog Is a mammal>

Super med flernivåarv

La oss ta en annen eksempel på en superfunksjon , anta at en klasse kan svømme er arvet av canFly, canFly fra pattedyrklassen. Så pattedyrklassen arver fra flernivåarven. La oss se bruken av Python super med argumenter i dette tilfellet.

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

>

>

Utgang:

Dog cannot swim Dog cannot fly Dog Is a mammal>

Python Multiple Inheritance og MRO

I det gitte eksemplet arver klasse C fra klasse A og B, og den overstyrer age()-metoden. Imidlertid, i age()-metoden til klasse C, påkaller super(C, self).age()-linjen alder()-metoden fra neste klasse i MRO. I dette tilfellet vil den påkalle age()-metoden fra klasse A siden den vises før klasse B i 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())>

>

>

Utgang:

(, , , ) [, , , ]>