Maison >développement back-end >Tutoriel Python >Comment puis-je empêcher les données de classe partagées entre les instances d'objets en Python ?
Empêcher le partage des données de classe entre les instances
Dans la programmation orientée objet, il est crucial de conserver des données distinctes pour différentes instances d'une classe. Cependant, par défaut, les variables au niveau de la classe sont partagées entre toutes les instances, ce qui peut entraîner des comportements inattendus.
Comprendre le problème
Considérez le code suivant :
class a: list = [] x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 2, 3, 4] print(y.list) # prints [1, 2, 3, 4]
Au lieu d'obtenir des listes distinctes pour x et y, les deux instances partagent la même liste. Cela se produit parce que la liste est déclarée comme variable de classe, donc toutes les instances font référence au même objet sous-jacent.
Solution : variables d'instance
Pour éviter les données partagées, les variables d'instance doivent être utilisé. Les variables d'instance sont définies dans le constructeur (__init__) de la classe. Voici le code corrigé :
class a: def __init__(self): self.list = [] x = a() y = a() x.list.append(1) y.list.append(2) x.list.append(3) y.list.append(4) print(x.list) # prints [1, 3] print(y.list) # prints [2, 4]
Dans ce cas, l'attribut list est initialisé pour chaque instance dans le constructeur, créant des copies distinctes. Les instructions d'impression reflètent désormais avec précision le comportement prévu avec des listes distinctes pour x et y.
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!