PaliSkill
← Python avancé

Leçon 2 / 10 — Chapitre 1: POO : les fondamentaux

Attributs d'instance et attributs de classe

Un attribut défini dans __init__ avec self. est un attribut d'instance : propre à chaque objet, comme vu à la leçon précédente. Un attribut de classe, défini directement dans le corps de la classe, est en revanche partagé par tous les objets de cette classe.

class Produit:
    devise = "$"

    def __init__(self, nom, prix):
        self.nom = nom
        self.prix = prix

riz = Produit("riz", 5)
huile = Produit("huile", 8)

print(riz.devise, huile.devise)

Ce code affiche $ $ : devise n'est écrit qu'une seule fois dans la classe, mais accessible depuis chaque objet — riz.devise et huile.devise pointent tous deux vers la même valeur partagée.

Modifier un attribut de classe via la classe elle-même affecte tous les objets qui n'ont pas leur propre valeur locale :

Produit.devise = "€"
print(riz.devise)

Ce code affiche € : comme aucun des deux objets n'a de devise propre (définie avec self.devise), ils continuent de lire la valeur partagée de la classe, désormais modifiée.

À vous de jouer : ajoutez un attribut de classe categorie = "alimentation" à Produit, créez deux objets, et vérifiez qu'ils partagent bien la même valeur.

À vous de jouer

À faire

Que va afficher ce code ?

class Produit:
    devise = "$"
    def __init__(self, nom):
        self.nom = nom

a = Produit("riz")
b = Produit("huile")
print(a.devise == b.devise)

Copiez ce code dans un environnement Python en ligne (Google Colab, Replit, ou tout autre) pour vérifier le résultat avant de répondre.

À vous de jouer

À faire

Un attribut defini avec self.nom dans init est-il un attribut d'instance ou un attribut de classe ?

Copiez ce code dans un environnement Python en ligne (Google Colab, Replit, ou tout autre) pour vérifier le résultat avant de répondre.

💡 deux mots

Quitter le module