Python >> Tutoriel Python >  >> Python

Python super() - Un guide illustré simple

super() intégré de Python La méthode renvoie un objet temporaire de la superclasse pour vous aider à accéder à ses méthodes. Son but est d'éviter d'utiliser explicitement le nom de la classe de base. Cela permet également à votre classe d'hériter de plusieurs classes de base.

Idée visuelle super()

L'idée est simple :utilisez super() pour appeler les méthodes définies dans les classes parentes, que votre classe enfant hérite d'une ou de plusieurs classes de base. Voir le graphique :

Besoin de moi pour vous guider à travers cet exemple? Regardez ensuite la vidéo explicative !

Vidéo super() par exemple

Ensuite, vous découvrirez les deux cas par exemple !

Exemple simple 1 :super() avec héritage unique

Héritage dans la programmation orientée objet vous permet de créer une hiérarchie de classes dans laquelle une classe enfant hérite de toutes les méthodes d'une autre classe parent. Cela simplifie le développement de grands projets logiciels et évite le code redondant. Vous pouvez en savoir plus sur le concept d'héritage dans notre tutoriel de blog ici.

Par exemple, le code suivant définit la classe parente Organism et la classe enfant Human . La classe enfant utilise super() pour exécuter la méthode constructeur de la classe parent.

class Organism:
    def __init__(self):
        print('I live')


class Human(Organism):
    def __init__(self):
        print('I am human')
        super().__init__()


alice = Human()

La sortie est :

I am human
I live

Ici, vous appelez la classe de base Organism en utilisant le code suivant :

super().__init__()

Un appel de code sémantiquement équivalent serait :

Organism.__init__(self)

Vous appelez le __init__() méthode sur la classe de base Organism et passez une référence à l'instance appelante en tant qu'argument. De cette façon, vous pourrez également modifier les attributs internes du self instance dans le constructeur de la classe de base.

Cependant, l'avantage d'utiliser super().__init__() par rapport à ParentClass.__init__(self) est que vous évitez d'appeler explicitement la classe parent. Ceci est avantageux car cela dissocie l'enfant de la classe parent. Par exemple, si vous avez changé le nom du ParentClass à NewParentClass , la méthode utilisant super() serait supérieur car cela fonctionnerait toujours pendant que la méthode utilisant ParentClass.__init__(self) renverrait une erreur.

Exemple 2 :super() avec héritage multiple

L'une des caractéristiques uniques de Python par rapport aux autres langages de programmation est qu'il permet l'héritage multiple .

L'héritage multiple signifie qu'une classe peut hériter de plusieurs parents. Par exemple, une classe Human peut hériter de deux classes parentes :Organism et Thinker . Supposons que vous définissiez une méthode live() dans Organisme et think() dans Penseur. Si un objet humain hérite des deux classes, il peut appeler live() et think() à la fois! Vous utilisez le super() méthode pour appeler ces fonctions :

class Organism:
    def live(self):
        print('I live')


class Thinker:
    def think(self):
        print('I think')


class Human(Organism, Thinker):
    def __init__(self):
        print('I am human')
        super().live()
        super().think()
 

alice = Human()

La sortie est :

I am human
I live
I think

Je dois mentionner que dans cet exemple, vous auriez également pu appeler self.live() et self.think() dans la classe Human au lieu de super().live() et super().think() . La sortie serait la même dans les deux cas. En pratique, vous utiliseriez la première pour les méthodes d'instance et ce dernier pour les méthodes de classe . La différence entre les deux est expliquée dans notre tutoriel de blog ici.

Résumé

super() intégré de Python La méthode renvoie un objet temporaire de la superclasse pour vous aider à accéder à ses méthodes. Son but est d'éviter d'utiliser explicitement le nom de la classe de base. Cela permet également à votre classe d'hériter de plusieurs classes de base.

Vous pouvez approfondir certaines des bizarreries du super() méthode ici :

  • https://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods
  • https://realpython.com/python-super/
  • https://rhettinger.wordpress.com/2011/05/26/super-considered-super/

Si vous avez passé une heure à étudier les trois ressources, vous êtes devenu un super() superstar et cela vous aidera tout au long de votre carrière en programmation. Un bon retour sur le temps investi !