Prérequis: Héritage en Python
La substitution de méthode est une capacité de tout langage de programmation orienté objet qui permet à une sous-classe ou à une classe enfant de fournir une implémentation spécifique d'une méthode déjà fournie par l'une de ses super-classes ou classes parentes. Lorsqu'une méthode d'une sous-classe a le même nom, les mêmes paramètres ou signature et le même type de retour (ou sous-type) qu'une méthode de sa super-classe, alors la méthode de la sous-classe est dite passer outre la méthode dans la super-classe.

La version d'une méthode exécutée sera déterminée par l'objet utilisé pour l'invoquer. Si un objet d'une classe parent est utilisé pour appeler la méthode, alors la version de la classe parent sera exécutée, mais si un objet de la sous-classe est utilisé pour appeler la méthode, alors la version de la classe enfant sera exécutée. En d’autres termes, c’est le type de l’objet auquel il est fait référence (et non le type de la variable de référence) qui détermine quelle version d’une méthode remplacée sera exécutée.
Exemple:
# 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()> |
>
>
Sortir:
Inside Parent Inside Child>
Remplacement de méthode avec héritage multiple et multiniveau
- Héritage multiple : Lorsqu'une classe est dérivée de plusieurs classes de base, elle est appelée héritage multiple.
Exemple: Prenons un exemple dans lequel nous souhaitons remplacer une méthode d'une seule classe parent. Ci-dessous la mise en œuvre.
suppression d'un arbre de recherche binaire
# 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()>>
>
Sortir:
Inside Child Inside Parent2>
Héritage à plusieurs niveaux : lorsque nous avons une relation d'enfant et de petit-enfant.Exemple: Prenons un exemple dans lequel nous souhaitons remplacer une seule méthode de l'une de ses classes parentes. Ci-dessous la mise en œuvre.
# 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()>>
>
Sortir:
Inside GrandChild Inside Parent>
Appel de la méthode Parent dans la méthode remplacée
Les méthodes de la classe parent peuvent également être appelées dans les méthodes remplacées. Ceci peut généralement être réalisé de deux manières.
- Utilisation du nom de classe : les méthodes de classe du parent peuvent être appelées à l'aide du nom de classe parent.
classname.method>à l'intérieur de la méthode remplacée.Exemple:
convertir un booléen en chaîne
# 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()> |
>
>
Sortir:
Inside Parent Inside Child>Utiliser Super() : Python
super()>La fonction nous offre la possibilité de faire référence explicitement à la classe parent. C'est fondamentalement utile lorsque nous devons appeler des fonctions de superclasse. Il renvoie l'objet proxy qui nous permet de faire référence à la classe parent par « super ».Exemple 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()> |
>
>
Sortir:
Inside Parent Inside Child>
Exemple 2 :
exploration de données
# 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>)> |
>
>
Sortir:
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>