__init__()
Une méthode appelée automatiquement lors de la création d’un objet. Elle y enregistre les données initiales, c’est-à-dire les attributs.
- Renvoie
- Toujours
None. L’appel de la classe lui-même renvoie l’objet prêt à l’emploi.
Exemple
#class Student:
def __init__(self, name, points=0):
self.name = name
self.points = points
self.level = points // 100 + 1
léa = Student("Léa", 250)
lucas = Student("Lucas")
print(léa.name, léa.points, léa.level)
print(lucas.name, lucas.points, lucas.level)
print(vars(léa))Définition et utilisation
#La méthode __init__, couramment appelée le constructeur, prépare un nouvel objet à être utilisé. Python l’appelle lui-même, juste après la création de l’objet, quand vous écrivez par exemple Student("Léa", 250). Les arguments donnés entre parenthèses après le nom de la classe arrivent justement dans __init__, dont le rôle est de les enregistrer comme attributs de l’objet : self.name = name.
Le premier paramètre, self, est l’objet qui vient d’être créé, que Python transmet automatiquement. Les autres paramètres fonctionnent comme dans une fonction ordinaire : ils peuvent avoir des valeurs par défaut et être donnés par leur nom. Les attributs n’ont pas besoin d’être une copie des arguments ; ils peuvent aussi être calculés à partir de ceux-ci, par exemple un niveau basé sur les points.
À proprement parler, l’objet est créé un instant plus tôt, dans la méthode __new__, qu’il est rarement nécessaire de toucher. __init__ se contente de l’initialiser et doit renvoyer None ; essayer de renvoyer une autre valeur se termine par une erreur TypeError. C’est un bon endroit pour vérifier la validité des données : une exception levée dans __init__ fait que l’appel de la classe ne renvoie pas d’objet, donc les données invalides n’atteignent jamais le reste du programme.
Syntaxe
#class Nom:
def __init__(self, parametre, optionnel=valeur):
self.attribut = parametreParamètres
#self
le nouvel objet
L’objet en cours de création. Python le transmet automatiquement, donc vous ne le fournissez pas lors de l’appel.autres paramètres
valeurs quelconques
Les arguments donnés lors de la création de l’objet, par ex.Student("Léa", 250). Ils peuvent avoir des valeurs par défaut.
Plus d’exemples
#class Course:
def __init__(self, title, modules):
if modules <= 0:
raise ValueError("Un cours doit avoir au moins un module")
self.title = title
self.modules = modules
python = Course("Python", 12)
print(python.title, python.modules)
try:
Course("Cours vide", 0)
except ValueError as error:
print("Erreur :", error)class Team:
def __init__(self, name, members=[]):
self.name = name
self.members = members
red = Team("Rouges")
blue = Team("Bleus")
red.members.append("Léa")
print(blue.members)
class SafeTeam:
def __init__(self, name, members=None):
self.name = name
self.members = list(members) if members is not None else []
red = SafeTeam("Rouges")
blue = SafeTeam("Bleus")
red.members.append("Léa")
print(blue.members)La liste par défaut n’est créée qu’une seule fois, lors de la définition de la méthode, donc tous les objets Team partagent la même liste. SafeTeam crée une nouvelle liste pour chaque objet.
Bonnes pratiques
#- Définissez tous les attributs d’un objet dans
__init__, même s’ils valentNoneau départ. On voit alors immédiatement quelles données l’objet contient. - N’utilisez ni liste ni dictionnaire comme valeur par défaut d’un paramètre. Écrivez
Noneet créez la nouvelle collection à l’intérieur de la méthode. - Quand une classe sert surtout à stocker des données,
@dataclassgénère__init__pour vous.
Entrées associées
#- selfLe premier paramètre d’une méthode : l’objet sur lequel la méthode a été appelée. Il donne accès à ses attributs et à ses autres méthodes.
- super()Appelle une méthode de la classe de base depuis la classe dérivée, le plus souvent le constructeur __init__.
- @dataclassUn décorateur qui génère __init__, __repr__ et __eq__ à partir des champs annotés d’une classe qui sert à stocker des données.
- __str__() et __repr__()Des méthodes qui définissent l’apparence textuelle d’un objet : lisible pour l’utilisateur (__str__) et technique pour le programmeur (__repr__).
Pratiquer dans les leçons
#Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.