Python - Constructeurs

Table des matières
Dans Python il existe des méthodes dites « magiques », c'est-à-dire des méthodes qui sont construites et ont un nom spécial et qui ne sont appelées que dans certaines circonstances, car l'appel direct de ces méthodes n'est pas habituel dans le cadre d'un programme.
Constructeurs
La méthode __init__ il est chargé d'agir en constructeur, c'est-à-dire qu'il va initialiser une série d'attributs et exécuter le code que l'on définit au moment où un objet de la classe est créé, s'appelant "__init__" avec deux traits de soulignement à la au début et à la fin du mot d'initialisation, vous avez déjà la syntaxe appropriée pour cela Python prenez-le comme une méthode "magique" et sachez qu'il doit être exécuté lors de l'instanciation de la classe.
Ce que le constructeur réalise, c'est qu'au lieu de faire ce qui suit pour initialiser un objet :
 >>> f = FooBar () >>> f.init () 

En plaçant déjà ce code, l'objet a initialisé ses attributs uniquement en utilisant :
>>> f = FooBar ()

Comme vous pouvez le voir, c'est une économie importante lors du codage et une aide en cas d'oubli d'initialisation de l'objet.
Création du constructeur
Créer le constructeur dans Python C'est assez simple, il suffit de définir la méthode et d'ajouter ce qu'il faut faire lors de la création de l'objet, voyons un exemple :

Dans l'image, vous pouvez voir la méthode définie et dans ce qu'elle doit exécuter, nous voyons qu'elle définit l'attribut un peu et est égal à 42. Voyons un exemple de la façon dont un objet de cette classe s'exécuterait :

Dans l'image, nous voyons que lors de la définition de l'objet f du type FooBar Il est initialisé et lors de l'accès à son attribut, somevar affiche 42, qui est la valeur définie dans le constructeur.
Maintenant, que se passe-t-il si nous voulons que les attributs soient initialisés dynamiquement, réécrivons la méthode comme suit :
 classe FooBar : def __init __ (self, value = 42) : self.somevar = value 

En faisant le paramètre facultatif, nous pouvons passer une valeur, au cas où nous ne la transmettions pas, elle prendra 42 comme valeur par défaut.
L'exécution du programme serait la suivante :
 >>> f = FooBar ('Ceci est un argument constructeur') >>> f.somevar 'Ceci est un argument constructeur' 

De cette façon, nous avons rendu notre constructeur dynamique afin que nous puissions attribuer différents attributs à nos objets en fonction de nos besoins au sein du programme.
Écraser le constructeur
Il y a des moments où nous devons hériter des super classes, pour cela parfois nous devons écraser le constructeur, voyons l'exemple suivant pour comprendre de quoi il s'agit :

Ici, nous avons créé une classe appelée Bird où le constructeur définit l'attribut faim, nous exécutons ce qui suit et voyons comment cela fonctionne :
 >>> b = Oiseau () >>> b.eat () Aaaah… >>> b.eat () Non, merci ! 

Maintenant, que se passe-t-il si nous héritons de cette classe, voyons le code suivant :
 class SongBird (Bird): def __init __ (self): self.sound = 'Squawk!' def chanter (self): imprimer self.sound 

Nous exécutons un petit programme :
 >>> sb = SongBird () >>> sb.sing () Squawk! 

Maintenant, si nous appelons la méthode eat(), nous verrons une erreur :
 >>> sb.eat () Traceback (appel le plus récent en dernier): Fichier "", ligne 1, dans? Fichier "birds.py", ligne 6, dans eat if self.hungry : AttributeError : l'instance de SongBird n'a pas d'attribut 'affamé' 

L'exception nous dit que l'attribut faim n'existe pas, nous devons donc appeler le constructeur de la super classe au sein de notre constructeur :
 class SongBird (Bird): def __init __ (self): Bird .__ init __ (self) self.sound = 'Squawk!' def chanter (self): imprimer self.sound 

Maintenant, lors de l'exécution du code, tout fonctionnera sans problème :
 >>> sb = SongBird () >>> sb.sing () Squawk! >>> sb.eat () Aaaah… >>> sb.eat () Non, merci ! 

Avec cela, nous terminons le tutoriel, nous savons déjà comment utiliser la méthode __init__ de manière basique et comment le faire lorsque nous devons hériter d'une classe supérieure.Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave