0Pricing
Python Academy · Leçon

Attributs d’instance et de classe

Faites la distinction entre les données propres à chaque objet et les données partagées au niveau de la classe.

Attributs d’instance et de classe est une leçon Python Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Python Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Python Academy comprend 4 leçons au total.

Introduction

Comprendre la différence entre les attributs d’instance et de classe permet d’éviter des bogues subtils et de gérer efficacement un état partagé.

Attribut de classe

class Dog: legs = 4 — legs est partagé par toutes les instances. Accédez-y avec Dog.legs ou dog.legs.
class Dog:
    legs = 4
print(Dog.legs)
print(Dog().legs)

Attribut d’instance

self.name = name dans __init__ est propre à chaque instance. Chaque Dog possède son propre nom.
class Dog:
    def __init__(self, name):
        self.name = name
d1 = Dog('Rex')
d2 = Dog('Buddy')
print(d1.name, d2.name)

Ordre de recherche des attributs

Python vérifie d’abord le __dict__ de l’instance, puis le __dict__ de la classe, et enfin les classes de base. Les attributs d’instance masquent les attributs de classe.
class C:
    x = 10
c = C()
c.x = 99  # instance shadows class attr
print(c.x)  # 99
print(C.x)  # 10

Piège des attributs de classe mutables

class C: items = [] — toutes les instances partagent la même liste. Ajouter un élément depuis une instance modifie la liste pour toutes les autres !
class C:
    items = []
C.items.append(1)
print(C().items)  # [1] — shared!

Résoudre le piège des objets mutables

Déplacez l’initialisation dans __init__ : def __init__(self): self.items = [] Chaque instance obtient ainsi sa propre liste.
class C:
    def __init__(self):
        self.items = []
c1 = C(); c2 = C()
c1.items.append(1)
print(c1.items, c2.items)

Inspection de __dict__

obj.__dict__ est le dictionnaire des attributs de l’instance. Class.__dict__ est le dictionnaire des attributs de la classe.
class Dog:
    legs = 4
    def __init__(self, name): self.name = name
d = Dog('Rex')
print(d.__dict__)
print(Dog.__dict__.keys())

Méthodes de classe comme fabriques

@classmethod reçoit cls (la classe) au lieu de self. Utilisez-le comme constructeur alternatif.
class Date:
    def __init__(self, y, m, d): self.y,self.m,self.d=y,m,d
    @classmethod
    def from_string(cls, s):
        y,m,d=map(int,s.split('-'))
        return cls(y,m,d)
dt=Date.from_string('2024-01-15')
print(dt.y,dt.m,dt.d)

Méthodes statiques

@staticmethod ne reçoit ni self ni cls. Utilisez-la pour des fonctions utilitaires regroupées logiquement avec une classe, mais qui n’ont pas besoin de l’instance ou de la classe.
class MathUtils:
    @staticmethod
    def add(a, b): return a + b
print(MathUtils.add(3, 4))

Suivre les instances avec un attribut de classe

Un attribut de classe utilisé comme compteur permet de suivre le nombre d’instances créées.
class Widget:
    count = 0
    def __init__(self):
        Widget.count += 1
Widget(); Widget(); Widget()
print(Widget.count)

hasattr() et vars()

hasattr(obj, 'name') vérifie l’existence d’un attribut. vars(obj) est équivalent à obj.__dict__.
class P:
    def __init__(self, x): self.x = x
p = P(5)
print(hasattr(p, 'x'), hasattr(p, 'z'))
print(vars(p))

Vérification rapide

Que se passe-t-il lorsque vous ajoutez un élément à la liste mutable d’un attribut de classe depuis une instance ?

Récapitulatif

Les attributs de classe sont partagés ; les attributs d’instance sont propres à chaque objet. La recherche dans l’instance masque celle dans la classe. Initialisez les objets mutables dans __init__. Utilisez @classmethod pour les méthodes de fabrique.

Continuez

Excellent ! Continuez avec la leçon suivante pour approfondir vos compétences.

Questions Fréquemment Posées

La leçon « Attributs d’instance et de classe » est-elle gratuite ?

Oui — le texte complet de « Attributs d’instance et de classe » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Python Academy, passe à CoddyKit PRO. Le cours Python Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Attributs d’instance et de classe » ?

Faites la distinction entre les données propres à chaque objet et les données partagées au niveau de la classe. Tu pratiques Python Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Python Academy ?

Aucune expérience préalable n'est requise. Python Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Attributs d’instance et de classe » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Python Academy ?

Oui. Chaque leçon Python Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Classes et méthode __init__
  2. Attributs d’instance et de classe
  3. Méthodes d’instance et self
  4. Méthodes magiques : __str__ et __repr__
← Retour à Python Academy