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 = gradeCré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) # BAccé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 PythonMaintenant, 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 AcademySortie :
Alice
Bob
A
B
Python High School
Python High School
Python High School
Python Academy
Python AcademyVous 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'âgeDiffé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.
Défi
FacileComplé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 classeBankAccountavec des attributs et des méthodesdriver.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 = gradeAccéder aux variables d'instance (propres à chaque objet) :
alice = Student("Alice", "A")
bob = Student("Bob", "B")
print(alice.name) # Alice
print(bob.name) # BobAccé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 SchoolLa modification des variables de classe affecte toutes les instances :
Student.school = "Python Academy"
print(alice.school) # Python Academy
print(bob.school) # Python AcademyCréer des variables d'instance après la création de l'objet :
alice.age = 16 # This creates an instance variable
print(alice.age) # 16Essayez 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êtCette 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
1Les fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe paramètre selfMéthodesAttributsMéthode constructeur (__init__)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLa fonction super()Redéfinition de méthodeHéritage multipleOrdre de résolution des méthodesRécapitulatif - Hiérarchie des employés7Méthodes spéciales
Introduction aux méthodes magiquesSurcharge d'opérateursMéthodes magiques de conteneurRécapitulatif - Liste personnalisée10Patrons de conception, Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy2Décorateurs
Introduction aux décorateursDécorateur de propriétéDécorateur de méthode statiqueDécorateur de méthode de classe5Polymorphisme
Retour sur la redéfinition de méthodeDuck TypingClasses et méthodes abstraitesConception d'interfacesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageMixinsMéthodes statiques et de classeDécorateurs de classeGestionnaires de contexte11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Propriétés de classe
Variables d'instance vs variables de classeDécorateurs de propriétéAttributs privésRécapitulatif - Gestionnaire de compte bancaire