4.1 Initialisation
D'habitude, juste après leur création, les objets ne sont pas encore prêts à fonctionner. Il faut d'abord leur transmettre toutes les données nécessaires : paramètres de fonctionnement, valeurs initiales, références à d'autres objets, etc.
Ce processus s'appelle l'initialisation et doit avoir lieu immédiatement après la création de l'objet.
Supposons que tu as une classe Chat (Cat)
, et tu veux lui attribuer un nom et un âge, tu peux le faire de plusieurs manières :
Initialisation des attributs après la création de l'objet
Dans cet exemple, on crée d'abord :
- un objet vide
Cat
. - une instance de la classe
Cat
appeléebarsik
. - ensuite sur l'objet barsik, on initialise deux attributs :
name
etage
sont ajoutés directement à l'objet.
class Cat:
pass
# Création d'un objet Cat
barsik = Cat()
# Initialisation des attributs après la création de l'objet
barsik.name = "Barsik"
barsik.age = 5
print(f"Nom du chat : {barsik.name}, âge : {barsik.age}") # Affiche: Nom du chat : Barsik, âge : 5
Utilisation d'une méthode pour initialiser les attributs
Dans cet exemple, une méthode initialize
est utilisée pour l'initialisation des attributs. Un objet Cat
est créé sans aucun attribut, puis la méthode initialize()
est utilisée pour définir les valeurs des attributs.
class Cat:
def initialize(self, name, age):
self.name = name
self.age = age
# Création d'un objet Cat
barsik = Cat()
# Initialisation des attributs via une méthode
barsik.initialize("Barsik", 5)
print(f"Nom du chat : {barsik.name}, âge : {barsik.age}") # Affiche: Nom du chat : Barsik, âge : 5
Utilisation des champs de classe
Dans cet exemple, les attributs name
et age
sont définis au niveau de la classe. Après la création de l'objet barsik
, les attributs sont initialisés directement.
class Cat:
name = ""
age = 0
# Création d'un objet Cat
barsik = Cat()
# Initialisation des attributs de l'objet
barsik.name = "Barsik"
barsik.age = 5
print(f"Nom du chat : {barsik.name}, âge : {barsik.age}") # Affiche: Nom du chat : Barsik, âge : 5
Quelle méthode est la meilleure ? Aucune ! Il est préférable d'utiliser un constructeur :)
4.2 Constructeur
Un constructeur est une méthode spéciale qui se déclenche automatiquement
lors de la création d'un nouvel objet de classe. Il permet d'initialiser les champs de l'objet et peut réaliser toutes les actions initiales nécessaires à la configuration de l'objet.
En Python, le constructeur est une méthode nommée __init__
. Voici les faits principaux à son sujet :
-
La méthode
__init__
est le constructeur en Python. Elle est appelée automatiquement lors de la création d'une nouvelle instance de classe. -
__init__
prend au minimum un paramètre —self
, qui fait référence à l'objet en cours de création. D'autres paramètres peuvent également être passés pour initialiser les attributs de l'objet. -
À l'intérieur de la méthode
__init__
, on peut définir les valeurs initiales des attributs de l'objet en utilisantself
. - Le constructeur peut effectuer toutes les actions nécessaires à la configuration de l'objet, comme la vérification des données entrantes ou l'établissement de liens avec d'autres objets.
Les paramètres sont passés au constructeur automatiquement, il te suffit de les mentionner dans les parenthèses lors de la création de l'objet.
Voici à quoi ressemblerait l'initialisation de notre chat en utilisant un constructeur :
class Cat:
def __init__(self, name, age):
self.name = name
self.age = age
# Création d'un objet Cat avec un nom et un âge
barsik = Cat("Barsik", 5)
print(f"Nom du chat : {barsik.name}, âge : {barsik.age}") # Affiche: Nom du chat : Barsik, âge : 5
Après la création d'un objet de type Cat
, la méthode __init__
sera appelée automatiquement, et elle recevra trois paramètres :
- Une référence à l'objet barsik dans le paramètre
self
- La chaîne « Barsik » dans le paramètre
name
- Le nombre 5 dans le paramètre
age
C'est pratique et élégant.
Validation des données
Dans le constructeur, on peut aussi effectuer une validation des données. Après tout, le but du constructeur est de créer un objet valide (correct) avec lequel on pourra continuer à travailler. Par exemple :
class Cat:
def __init__(self, name, age):
if age < 0:
raise ValueError("L'âge ne peut pas être négatif")
self.name = name
self.age = age
# Création d'un objet Cat avec vérification de l'âge
try:
barsik = Cat("Barsik", -3)
except ValueError as e:
print(e) # Affiche: L'âge ne peut pas être négatif
GO TO FULL VERSION