Variables de classe et d'instance Python : percer le mystère
Lorsque vous travaillez avec des classes Python, il est crucial de comprendre la distinction entre les variables de classe et d'instance . Cette question explore une observation intrigante : pourquoi une certaine variable se comporte parfois comme une variable de classe et parfois comme une variable d'instance.
Examinons les extraits de code fournis pour plus de clarté. Dans le premier exemple, la variable list est initialisée au niveau de la classe :
<code class="python">class testClass(): list = []</code>
Cela fait de list une variable de classe, partagée entre toutes les instances de testClass. Toute modification de list par une instance affecte toutes les autres instances.
Cependant, dans le deuxième exemple, la variable list est initialisée au sein du constructeur (méthode init) :
<code class="python">class testClass(): def __init__(self): self.list = []</code>
Cela crée une variable d'instance, unique à chaque instance. Toute modification apportée à la liste par une instance n'affecte pas les autres instances.
Pour comprendre ce comportement, nous devons comprendre comment Python résout les noms à l'aide de l'opérateur "."". Lors de l'accès à self.list, le runtime recherche d'abord pour la liste dans la portée de l'objet d'instance. S'il n'est pas trouvé, il vérifie l'instance de classe.
Dans le premier exemple, la variable de liste est résolue en instance de classe, ce qui en fait une variable de classe même si elle apparaît dans le constructeur (méthode init). En effet, il n'y a pas de self.list à résoudre dans la portée de l'instance.
Dans le deuxième exemple, cependant, la variable list est résolue en instance. scope, créant une variable d'instance. En effet, self.list est désormais dans la portée en raison de la liaison explicite au sein de la méthode init.
En bref, le comportement d'une variable en tant que classe. ou la variable d'instance dépend de son emplacement d'initialisation et de la présence de self.list dans la portée de l'instance. En comprenant la sémantique nuancée de la résolution de nom, les développeurs peuvent gérer efficacement la portée de la variable dans les classes Python.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!