Forudsætning: Arv i Python
Metodetilsidesættelse er en evne hos ethvert objektorienteret programmeringssprog, der tillader en underklasse eller underklasse at levere en specifik implementering af en metode, der allerede er leveret af en af dens superklasser eller overordnede klasser. Når en metode i en underklasse har samme navn, samme parametre eller signatur og samme returtype (eller undertype) som en metode i sin superklasse, så siges metoden i underklassen at tilsidesætte metoden i superklassen.
Den version af en metode, der udføres, vil blive bestemt af det objekt, der bruges til at fremkalde den. Hvis et objekt af en overordnet klasse bruges til at kalde metoden, vil versionen i den overordnede klasse blive eksekveret, men hvis et objekt af underklassen bruges til at kalde metoden, vil versionen i den underordnede klasse blive eksekveret. Det er med andre ord typen af det objekt, der henvises til (ikke typen af referencevariablen), der bestemmer, hvilken version af en tilsidesat metode, der skal udfø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()> |
>
>
Produktion:
Inside Parent Inside Child>
Metode tilsidesætter med multipel og multilevel arv
- Multipel arv: Når en klasse er afledt af mere end én basisklasse, kaldes det multipel arv.
Eksempel: Lad os overveje et eksempel, hvor vi kun ønsker at tilsidesætte en metode for en overordnet klasse. Nedenfor er implementeringen.
strengsammenkædning
# 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>
Arv på flere niveauer: Når vi har et barn- og barnebarnsforhold.Eksempel: Lad os overveje et eksempel, hvor vi kun ønsker at tilsidesætte én metode af en af dens overordnede klasser. Nedenfor er implementeringen.
# 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>
Kalder forældrenes metode inden for den tilsidesatte metode
Overordnede klassemetoder kan også kaldes inden for de tilsidesatte metoder. Dette kan generelt opnås på to måder.
- Brug af klassenavn: Forældres klassemetoder kan kaldes ved at bruge overordnet
classname.method>
inde i den tilsidesatte metode.Eksempel:
selen
# 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>Brug af Super(): Python
super()>
funktion giver os muligheden for eksplicit at henvise til den overordnede klasse. Det er grundlæggende nyttigt, hvor vi skal kalde superklassefunktioner. Det returnerer proxy-objektet, der giver os mulighed for at henvise 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()> |
>
hvordan man sorterer arraylist i java
>
Produktion:
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> )> |
>
>
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>