Menu
Coddy logo textTech

Variables d'instance vs variables de classe

Fait partie de la section Object Oriented Programming du Journey Python de Coddy — leçon 13 sur 64.

Les variables d'instance sont uniques à chaque objet, tandis que les variables de classe sont partagées par tous les objets de la même classe.

Voici un exemple d'une classe avec les deux types de variables

class Student:
    # Variable de classe - partagée par toutes les instances
    school = "Python High School"
    
    def __init__(self, name, grade):
        # Variables d'instance - propres à chaque étudiant
        self.name = name
        self.grade = grade

Créez des objets étudiants :

alice = Student("Alice", "A")
bob = Student("Bob", "B")

Accédez aux variables d'instance (uniques à chaque objet) :

print(alice.name)  # Alice
print(bob.name)    # Bob
print(alice.grade) # A
print(bob.grade)   # B

Accédez aux variables de classe (partagées par tous les objets) :

print(alice.school)     # Lycée Python
print(bob.school)       # Lycée Python
print(Student.school)   # Lycée Python

Maintenant, modifiez la variable de classe :

Student.school = "Python Academy"

Vérifiez comment le changement affecte toutes les instances :

print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

Sortie :

Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python Academy

Vous pouvez également créer des variables d'instance après la création de l'objet :

alice.age = 16  # Cela crée une variable d'instance
print(alice.age)  # 16
# print(bob.age)  # Cela provoquerait une erreur - bob n'a pas d'âge

Différence clé : Les variables d'instance (créées avec self.variable_name) sont uniques à chaque objet, tandis que les variables de classe (définies directement dans la classe) sont partagées par tous les objets. Modifier une variable de classe affecte toutes les instances.

challenge icon

Défi

Facile

Complétez un système bancaire.. Vous définirez une classe BankAccount dans un fichier et l'utiliserez dans un autre.

Vous travaillerez avec :

  • bank_account.py : Définissez la classe BankAccount avec des attributs et des méthodes
  • driver.py : Importez la classe, créez des comptes et démontrez les variables de classe

Suivez les commentaires TODO dans les deux fichiers pour des instructions étape par étape. Les commentaires vous guideront dans la création de la classe avec les variables et méthodes appropriées, et montreront comment les variables de classe affectent toutes les instances.

Aide-mémoire

Les variables d'instance sont propres à chaque objet, tandis que les variables de classe sont partagées par tous les objets d'une même classe.

Classe avec les deux types de variables :

class Student:
    # Class variable - shared by all instances
    school = "Python High School"
    
    def __init__(self, name, grade):
        # Instance variables - unique to each student
        self.name = name
        self.grade = grade

Accéder aux variables d'instance (propres à chaque objet) :

alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name)  # Alice
print(bob.name)    # Bob

Accéder aux variables de classe (partagées par tous les objets) :

print(alice.school)     # Python High School
print(bob.school)       # Python High School
print(Student.school)   # Python High School

La modification des variables de classe affecte toutes les instances :

Student.school = "Python Academy"
print(alice.school)   # Python Academy
print(bob.school)     # Python Academy

Créer des variables d'instance après la création de l'objet :

alice.age = 16  # This creates an instance variable
print(alice.age)  # 16

Essayez vous-même

# TODO : Importer la classe BankAccount depuis bank_account.py
from bank_account import BankAccount

# TODO : Créer deux comptes avec ces détails exacts :
# - account1 : titulaire "Alice Smith" avec un solde de 1000 $
# - account2 : titulaire "Bob Jones" avec un solde de 2000 $

# TODO : Appeler display_info() pour les deux comptes

# TODO : Modifier la variable de classe interest_rate à 0.03 (3 %)
# Utiliser ce format : BankAccount.interest_rate = 0.03

# TODO : Afficher le texte "After interest rate change:"

# TODO : Appeler à nouveau display_info() pour les deux comptes pour montrer qu'ils ont tous deux le nouveau taux d'intérêt
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Object Oriented Programming