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
Libérer: 2024-12-24 06:02:24
original
402 Les gens l'ont consulté

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]
Copier après la connexion

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]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal