En Python, la fonction super() est utilisée pour faire référence à la classe parent ou à la superclasse. Il vous permet d'appeler des méthodes définies dans la superclasse à partir de la sous-classe, vous permettant ainsi d'étendre et de personnaliser les fonctionnalités héritées de la classe parent.
Syntaxe de super() en Python
Syntaxe: super()
chaîne sous forme de tableauRetour : Renvoie un objet proxy qui représente la classe parent.
Fonction super() dans Python Exemple
Dans l'exemple donné, Le Emp la classe a un __chaud__ méthode qui initialise le identifiant , et nom et Ajoute les attributs. Le Free-lance la classe hérite de Emp classe et ajoute un attribut supplémentaire appelé Courriels. Il appelle la méthode __init__ super() de la classe parent pour initialiser l'attribut hérité.
Python3
class> Emp():> >def> __init__(>self>,>id>, name, Add):> >self>.>id> => id> >self>.name>=> name> >self>.Add>=> Add> # Class freelancer inherits EMP> class> Freelance(Emp):> >def> __init__(>self>,>id>, name, Add, Emails):> >super>().__init__(>id>, name, Add)> >self>.Emails>=> Emails> Emp_1>=> Freelance(>103>,>'Suraj kr gupta'>,>'Noida'> ,>'KKK@gmails'>)> print>(>'The ID is:'>, Emp_1.>id>)> print>(>'The Name is:'>, Emp_1.name)> print>(>'The Address is:'>, Emp_1.Add)> print>(>'The Emails is:'>, Emp_1.Emails)> |
>
>
Sortir :
The ID is: 103 The Name is: Suraj kr gupta The Address is: Noida The Emails is: KKK@gmails>
A quoi sert la méthode super() ?
Une méthode d'une classe parent peut être appelée en Python à l'aide de la fonction super(). C’est une pratique typique dans programmation orientée objet pour appeler les méthodes de la superclasse et activer le remplacement et l'héritage des méthodes. Même si la classe actuelle a remplacé ces méthodes par sa propre implémentation, l’appel de super() vous permet d’accéder et d’utiliser les méthodes de la classe parent. En faisant cela, vous pouvez améliorer et modifier le comportement de la classe parent tout en continuant à en tirer profit.
Avantages de la super fonction
- Pas besoin de mémoriser ou de spécifier le nom de la classe parent pour accéder à ses méthodes. Cette fonction peut être utilisée aussi bien dans les héritages simples que multiples.
- Cela implémente la modularité (isolation des modifications) et la réutilisabilité du code car il n'est pas nécessaire de réécrire l'intégralité de la fonction.
- La super fonction de Python est appelée dynamiquement car Python est un langage dynamique, contrairement aux autres langages.
Comment fonctionne l'héritage sans Python Super ?
Dans l’exemple donné, il y a un problème avec la méthode __init__ de la classe Emp. La classe Emp est héritée de la classe Person, mais dans sa méthode __init__, elle n'appelle pas la méthode __init__ de la classe parent pour initialiser les attributs name et id.
Python3
# code> class> Person:> ># Constructor> >def> __init__(>self>, name,>id>):> >self>.name>=> name> >self>.>id> => id> ># To check if this person is an employee> >def> Display(>self>):> >print>(>self>.name,>self>.>id>)> > class> Emp(Person):> > >def> __init__(>self>, name,>id>):> >self>.name_>=> name> >def> Print>(>self>):> >print>(>'Emp class called'>)> Emp_details>=> Emp(>'Mayank'>,>103>)> # calling parent class function> Emp_details.name_, Emp_details.name> |
>
>
Sortir :
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) in 24 25 # calling parent class function --->26 Emp_details.name_, Emp_details.name AttributeError : l'objet 'Emp' n'a pas d'attribut 'name'>
Résoudre le problème ci-dessus avec Super en Python
Dans le code fourni, la classe Emp hérite correctement de la classe Person et la méthode __init__ de la classe Emp appelle désormais correctement la méthode __init__ de la classe parent en utilisant super() en Python.
Python3
# code> # A Python program to demonstrate inheritance> class> Person:> ># Constructor> >def> __init__(>self>, name,>id>):> >self>.name>=> name> >self>.>id> => id> ># To check if this person is an employee> >def> Display(>self>):> >print>(>self>.name,>self>.>id>)> > class> Emp(Person):> > >def> __init__(>self>, name,>id>):> >self>.name_>=> name> >super>().__init__(name,>id>)> >def> Print>(>self>):> >print>(>'Emp class called'>)> Emp_details>=> Emp(>'Mayank'>,>103>)> # calling parent class function> print>(Emp_details.name_, Emp_details.name)> |
>
>
Sortir :
Mayank Mayank>
Comprendre Python super() avec les méthodes __init__()
Python a une méthode réservée appelée __init__. En programmation orientée objet, on parle de constructeur. Lorsque cette méthode est appelée, elle permet à la classe d'initialiser les attributs de la classe. Dans une sous-classe héritée, une classe parent peut être référencée à l'aide de la fonction super(). La super fonction renvoie un objet temporaire de la superclasse qui permet d'accéder à toutes ses méthodes à sa classe enfant.
Note: Pour plus d'informations, reportez-vous à Héritage en Python .
Super fonction avec héritage unique
Prenons l'exemple des animaux. Les chiens, les chats et les vaches font partie des animaux. Ils partagent également des caractéristiques communes telles que –
- Ce sont des mammifères.
- Ils ont une queue et quatre pattes.
- Ce sont des animaux domestiques.
Ainsi, les classes chiens, chats et chevaux sont une sous-classe de la classe animale. Il s'agit d'un exemple d'héritage unique car de nombreuses sous-classes sont héritées d'une classe monoparentale.
Python3
# Python program to demonstrate> # super function> class> Animals:> ># Initializing constructor> >def> __init__(>self>):> >self>.legs>=> 4> >self>.domestic>=> True> >self>.tail>=> True> >self>.mammals>=> True> >def> isMammal(>self>):> >if> self>.mammals:> >print>(>'It is a mammal.'>)> >def> isDomestic(>self>):> >if> self>.domestic:> >print>(>'It is a domestic animal.'>)> class> Dogs(Animals):> >def> __init__(>self>):> >super>().__init__()> >def> isMammal(>self>):> >super>().isMammal()> class> Horses(Animals):> >def> __init__(>self>):> >super>().__init__()> >def> hasTailandLegs(>self>):> >if> self>.tail>and> self>.legs>=>=> 4>:> >print>(>'Has legs and tail'>)> # Driver code> Tom>=> Dogs()> Tom.isMammal()> Bruno>=> Horses()> Bruno.hasTailandLegs()> |
>
>
Sortir :
It is a mammal. Has legs and tail>
Super avec plusieurs héritages
Prenons-en un autre exemple de super fonction , Supposons qu'une classe peut voler et peut nager héritent d'une classe de mammifères et ces classes sont héritées par la classe d'animaux. Ainsi, la classe animale hérite des multiples classes de base. Voyons l'utilisation de Python super avec des arguments dans ce cas.
Python3
class> Mammal():> >def> __init__(>self>, name):> >print>(name,>'Is a mammal'>)> class> canFly(Mammal):> >def> __init__(>self>, canFly_name):> >print>(canFly_name,>'cannot fly'>)> ># Calling Parent class> ># Constructor> >super>().__init__(canFly_name)> class> canSwim(Mammal):> >def> __init__(>self>, canSwim_name):> >print>(canSwim_name,>'cannot swim'>)> >super>().__init__(canSwim_name)> class> Animal(canFly, canSwim):> >def> __init__(>self>, name):> >super>().__init__(name)> # Driver Code> Carol>=> Animal(>'Dog'>)> |
>
>
Sortir :
La classe Animal hérite des classes biparentales – canFly et canSwim. Ainsi, l'instance de sous-classe Carol peut accéder aux deux constructeurs de classe parent.
Dog cannot fly Dog cannot swim Dog Is a mammal>
Super avec héritage à plusieurs niveaux
Prenons-en un autre exemple de super fonction , supposons qu'une classe sachant nager soit héritée par canFly, canFly de la classe mammifère. Ainsi, la classe des mammifères hérite de l'héritage multi-niveaux. Voyons l'utilisation de Python super avec des arguments dans ce cas.
Python3
class> Mammal():> >def> __init__(>self>, name):> >print>(name,>'Is a mammal'>)> class> canFly(Mammal):> >def> __init__(>self>, canFly_name):> >print>(canFly_name,>'cannot fly'>)> ># Calling Parent class> ># Constructor> >super>().__init__(canFly_name)> class> canSwim(canFly):> >def> __init__(>self>, canSwim_name):> >print>(canSwim_name,>'cannot swim'>)> >super>().__init__(canSwim_name)> class> Animal(canSwim):> >def> __init__(>self>, name):> ># Calling the constructor> ># of both the parent> ># class in the order of> ># their inheritance> >super>().__init__(name)> # Driver Code> Carol>=> Animal(>'Dog'>)> |
>
>
Sortir :
1 à 100 romains non
Dog cannot swim Dog cannot fly Dog Is a mammal>
Héritage multiple Python et MRO
Dans l’exemple donné, la classe C hérite des classes A et B et remplace la méthode age(). Cependant, dans la méthode age() de la classe C, la ligne super(C, self).age() invoque la méthode age() à partir de la classe suivante dans le MRO. Dans ce cas, il invoquera la méthode age() de la classe A puisqu'elle apparaît avant la classe B dans le MRO.
Python3
class> A:> >def> age(>self>):> >print>(>'Age is 21'>)> class> B:> >def> age(>self>):> >print>(>'Age is 23'>)> class> C(A, B):> >def> age(>self>):> >super>(C,>self>).age()> > c>=> C()> print>(C.__mro__)> print>(C.mro())> |
>
>
Sortir :
(, , , ) [, , , ]>