CodeGym /Cours Java /Python SELF FR /Initialisation d'un objet

Initialisation d'un objet

Python SELF FR
Niveau 15 , Leçon 4
Disponible

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ée barsik.
  • ensuite sur l'objet barsik, on initialise deux attributs : name et age 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 utilisant self.
  • 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
               
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION