Prerequisito: Ereditarietà in Python
L'override del metodo è un'abilità di qualsiasi linguaggio di programmazione orientato agli oggetti che consente a una sottoclasse o classe figlia di fornire un'implementazione specifica di un metodo già fornito da una delle sue superclassi o classi madri. Quando un metodo in una sottoclasse ha lo stesso nome, gli stessi parametri o firma e lo stesso tipo restituito (o sottotipo) di un metodo nella sua superclasse, allora si dice che il metodo nella sottoclasse oltrepassare il metodo nella superclasse.

La versione di un metodo eseguito sarà determinata dall'oggetto utilizzato per invocarlo. Se un oggetto di una classe genitore viene utilizzato per invocare il metodo, verrà eseguita la versione nella classe genitore, ma se viene utilizzato un oggetto della sottoclasse per invocare il metodo, verrà eseguita la versione nella classe figlia. In altre parole, è il tipo dell'oggetto a cui si fa riferimento (non il tipo della variabile di riferimento) che determina quale versione di un metodo sottoposto a override verrà eseguita.
Esempio:
# 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()> |
>
>
Produzione:
Inside Parent Inside Child>
Metodo override con ereditarietà multipla e multilivello
- Eredità multipla: Quando una classe deriva da più di una classe base viene chiamata Eredità multipla.
Esempio: Consideriamo un esempio in cui vogliamo sovrascrivere un metodo di una sola classe genitore. Di seguito è riportata l'implementazione.
pulsante centrale nei css
# 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()>>
>
Produzione:
Inside Child Inside Parent2>
Eredità multilivello: quando abbiamo una relazione tra figli e nipoti.Esempio: Consideriamo un esempio in cui vogliamo sovrascrivere solo un metodo di una delle sue classi genitori. Di seguito è riportata l'implementazione.
# 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()>>
>
Produzione:
Inside GrandChild Inside Parent>
Chiamare il metodo del genitore all'interno del metodo sovrascritto
I metodi della classe genitore possono anche essere chiamati all'interno dei metodi sovrascritti. Ciò può generalmente essere ottenuto in due modi.
- Utilizzando Classname: i metodi della classe Parent possono essere chiamati utilizzando Parent
classname.method>all'interno del metodo sovrascritto.Esempio:
affettare Java
# 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()> |
>
>
Produzione:
Inside Parent Inside Child>Utilizzo di Super(): Python
super()>La funzione ci fornisce la possibilità di fare riferimento esplicitamente alla classe genitore. È fondamentalmente utile quando dobbiamo chiamare funzioni di superclasse. Restituisce l'oggetto proxy che ci consente di fare riferimento alla classe genitore con 'super'.Esempio 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()> |
>
metodi dell'elenco Java
>
Produzione:
Inside Parent Inside Child>
Esempio 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>)> |
>
>
Produzione:
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>