Forutsetning: Arv i Python
Metodeoverstyring er en evne til ethvert objektorientert programmeringsspråk som lar en underklasse eller barneklasse gi en spesifikk implementering av en metode som allerede er levert av en av dens superklasser eller overordnede klasser. Når en metode i en underklasse har samme navn, samme parametere eller signatur og samme returtype (eller undertype) som en metode i sin superklasse, så sies metoden i underklassen å overstyring metoden i superklassen.

Versjonen av en metode som utføres vil bli bestemt av objektet som brukes til å påkalle den. Hvis et objekt av en overordnet klasse brukes til å påkalle metoden, vil versjonen i den overordnede klassen bli utført, men hvis et objekt av underklassen brukes til å påkalle metoden, vil versjonen i underklassen bli kjørt. Det er med andre ord typen av objektet det refereres til (ikke typen referansevariabel) som bestemmer hvilken versjon av en overstyrt metode som skal utføres.
Eksempel:
# Python program to demonstrate> # method overriding> > > # Defining parent class> class> Parent():> > ># Constructor> >def> __init__(>self>):> >self>.value>=> 'Inside Parent'> > ># Parent's show method> >def> show(>self>):> >print>(>self>.value)> > # Defining child class> class> Child(Parent):> > ># Constructor> >def> __init__(>self>):> >self>.value>=> 'Inside Child'> > ># Child's show method> >def> show(>self>):> >print>(>self>.value)> > > # Driver's code> obj1>=> Parent()> obj2>=> Child()> > obj1.show()> obj2.show()> |
>
>
Produksjon:
Inside Parent Inside Child>
Metodeoverstyring med fler- og flernivåarv
- Multippel arv: Når en klasse er avledet fra mer enn én basisklasse kalles det multippel arv.
Eksempel: La oss vurdere et eksempel der vi ønsker å overstyre en metode for kun en overordnet klasse. Nedenfor er gjennomføringen.
all caps kommandoen excel
# Python program to demonstrate># overriding in multiple inheritance>>># Defining parent class 1>class>Parent1():>>># Parent's show method>>def>show(>self>):>>print>(>'Inside Parent1'>)>># Defining Parent class 2>class>Parent2():>>># Parent's show method>>def>display(>self>):>>print>(>'Inside Parent2'>)>>># Defining child class>class>Child(Parent1, Parent2):>>># Child's show method>>def>show(>self>):>>print>(>'Inside Child'>)>>># Driver's code>obj>=>Child()>>obj.show()>obj.display()>>
>
Produksjon:
Inside Child Inside Parent2>
Multilevel Arv: Når vi har et barn og barnebarn forhold.Eksempel: La oss vurdere et eksempel der vi ønsker å overstyre bare én metode for en av dens overordnede klasser. Nedenfor er gjennomføringen.
# Python program to demonstrate># overriding in multilevel inheritance>>># Python program to demonstrate># overriding in multilevel inheritance>>>class>Parent():>>># Parent's show method>>def>display(>self>):>>print>(>'Inside Parent'>)>>># Inherited or Sub class (Note Parent in bracket)>class>Child(Parent):>>># Child's show method>>def>show(>self>):>>print>(>'Inside Child'>)>># Inherited or Sub class (Note Child in bracket)>class>GrandChild(Child):>>># Child's show method>>def>show(>self>):>>print>(>'Inside GrandChild'>)>># Driver code>g>=>GrandChild()>g.show()>g.display()>>
>
Produksjon:
Inside GrandChild Inside Parent>
Å kalle foreldrenes metode innenfor den overstyrte metoden
Overordnede klassemetoder kan også kalles innenfor de overstyrte metodene. Dette kan generelt oppnås på to måter.
- Bruke klassenavn: Foreldres klassemetoder kan kalles ved å bruke overordnet
classname.method>inne i den overstyrte metoden.Eksempel:
java versjon linux
# Python program to demonstrate> # calling the parent's class method> # inside the overridden method> > > class> Parent():> > >def> show(>self>):> >print>(>'Inside Parent'>)> > class> Child(Parent):> > >def> show(>self>):> > ># Calling the parent's class> ># method> >Parent.show(>self>)> >print>(>'Inside Child'>)> > # Driver's code> obj>=> Child()> obj.show()> |
>
>
Produksjon:
Inside Parent Inside Child>Bruker Super(): Python
super()>funksjonen gir oss muligheten til å referere til den overordnede klassen eksplisitt. Det er i utgangspunktet nyttig der vi skal kalle superklassefunksjoner. Den returnerer proxy-objektet som lar oss referere overordnet klasse med 'super'.Eksempel 1:
# Python program to demonstrate> # calling the parent's class method> # inside the overridden method using> # super()> > > class> Parent():> > >def> show(>self>):> >print>(>'Inside Parent'>)> > class> Child(Parent):> > >def> show(>self>):> > ># Calling the parent's class> ># method> >super>().show()> >print>(>'Inside Child'>)> > # Driver's code> obj>=> Child()> obj.show()> |
>
python chr funksjon
>
Produksjon:
Inside Parent Inside Child>
Eksempel 2:
# Program to define the use of super()> # function in multiple inheritance> class> GFG1:> >def> __init__(>self>):> >print>(>'HEY !!!!!! GfG I am initialised(Class GEG1)'>)> > >def> sub_GFG(>self>, b):> >print>(>'Printing from class GFG1:'>, b)> > # class GFG2 inherits the GFG1> class> GFG2(GFG1):> >def> __init__(>self>):> >print>(>'HEY !!!!!! GfG I am initialised(Class GEG2)'>)> >super>().__init__()> > >def> sub_GFG(>self>, b):> >print>(>'Printing from class GFG2:'>, b)> >super>().sub_GFG(b>+> 1>)> > # class GFG3 inherits the GFG1 ang GFG2 both> class> GFG3(GFG2):> >def> __init__(>self>):> >print>(>'HEY !!!!!! GfG I am initialised(Class GEG3)'>)> >super>().__init__()> > >def> sub_GFG(>self>, b):> >print>(>'Printing from class GFG3:'>, b)> >super>().sub_GFG(b>+> 1>)> > > # main function> if> __name__>=>=> '__main__'>:> > ># created the object gfg> >gfg>=> GFG3()> > ># calling the function sub_GFG3() from class GHG3> ># which inherits both GFG1 and GFG2 classes> >gfg.sub_GFG(>10>)> |
>
>
Produksjon:
HEY !!!!!! GfG I am initialised(Class GEG3) HEY !!!!!! GfG I am initialised(Class GEG2) HEY !!!!!! GfG I am initialised(Class GEG1) Printing from class GFG3: 10 Printing from class GFG2: 11 Printing from class GFG1: 12>