Nödvändig förutsättning: Arv i Python
Metodöverstyrning är en förmåga hos vilket objektorienterat programmeringsspråk som helst som tillåter en underklass eller underklass att tillhandahålla en specifik implementering av en metod som redan tillhandahålls av en av dess superklasser eller överordnade klasser. När en metod i en underklass har samma namn, samma parametrar eller signatur och samma returtyp (eller undertyp) som en metod i sin superklass, så sägs metoden i underklassen att åsidosätta metoden i superklassen.
Den version av en metod som exekveras kommer att bestämmas av objektet som används för att anropa den. Om ett objekt av en överordnad klass används för att anropa metoden, kommer versionen i den överordnade klassen att exekveras, men om ett objekt av underklassen används för att anropa metoden, kommer versionen i den underordnade klassen att exekveras. Med andra ord är det typen av objekt som refereras till (inte typen av referensvariabel) som avgör vilken version av en åsidosatt metod som kommer att exekveras.
Exempel:
# 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()> |
>
>
Produktion:
Inside Parent Inside Child>
Metod åsidosättande med multipel och multilevel arv
- Multipelt arv: När en klass härleds från mer än en basklass kallas det multipel arv.
Exempel: Låt oss överväga ett exempel där vi vill åsidosätta en metod för endast en överordnad klass. Nedan följer genomförandet.
bool till sträng java
# 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()>
>
>
Produktion:
Inside Child Inside Parent2>
Flernivåarv: När vi har ett barn- och barnbarnsförhållande.Exempel: Låt oss överväga ett exempel där vi bara vill åsidosätta en metod för en av dess överordnade klasser. Nedan följer genomförandet.
# 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()>
>
>
Produktion:
Inside GrandChild Inside Parent>
Anropa förälderns metod inom den åsidosatta metoden
Överordnade klassmetoder kan också anropas inom de åsidosatta metoderna. Detta kan i allmänhet uppnås på två sätt.
- Använda klassnamn: Förälders klassmetoder kan anropas genom att använda föräldern
classname.method>
inuti den åsidosatta metoden.Exempel:
java läser csv
# 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()> |
>
>
Produktion:
Inside Parent Inside Child>Använder Super(): Python
super()>
funktionen ger oss möjlighet att hänvisa till den överordnade klassen uttryckligen. Det är i princip användbart där vi måste kalla superklassfunktioner. Det returnerar proxyobjektet som tillåter oss att hänvisa överordnad klass med 'super'.Exempel 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()> |
värde på java-strängen
>
>
Produktion:
Inside Parent Inside Child>
Exempel 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> )> |
>
>
Produktion:
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>