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 ?

Comment puis-je empêcher les données de classe partagées entre les instances d'objets en Python ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-24 06:02:24377parcourir

How Can I Prevent Shared Class Data Among Object Instances in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn