Définir le y
var sur l'attribut niveau de la classe. Vous devrez l'initialiser à quelque chose, même si c'est une liste vide (comme vous le faisiez auparavant).
>>> class X:
... y = []
... def __init__(self):
... pass
mise à jour en fonction de vos commentaires:
Vous avez mentionné que vous étiez mixte sur la terminologie (je suppose entre les variables de classe et d'instance), voici donc ce qui va arriver si vous utilisez cette classe (et n'est probablement pas ce que vous voulez).
>>> class X:
... y = [] # Class level attribute
... def __init__(self):
... pass
...
>>> x = X()
>>> x.y.append(1)
>>> x.y
[1]
>>> x.y.append(2)
>>> z = X()
>>> z.y.append(3)
>>> z.y
[1, 2, 3]
>>> X.y.append(4)
>>> [1, 2, 3, 4]
Notez que lorsque vous ajoutez une variable à la classe, elle reste entre les constructions. Dans le code précédent, nous avons instancié la variable x
et la variable z
comme une instance de X. Alors que nous avons ajouté à la variable y
dans l'instance z
, nous avons toujours ajouté à la variable de classe y
. Note sur la toute dernière ligne (X.y.append(4)
) J'ajoute un article en utilisant une référence à la classe X
.
Ce que vous voulez probablement est basé hors de votre message original:
>>> class X:
... def __init__(self, y=None):
... self.y = y or list() # Instance level attribute. Default to empty list if y is not passed in.
...
>>> x = X()
>>> x.y.append(1)
>>> x.y
[1]
>>> z = X()
>>> z.y.append(2)
>>> z.y
[2]
>>>
>>> s = X()
>>> s.y
[]
>>> t = X(y=[10])
>>> t.y
[10]
Remarquez comment une nouvelle liste est créée avec chaque instance. Lorsque nous créons une nouvelle instance z
et essayons d'ajouter à la variable y
nous obtenons seulement la valeur qui a été ajoutée, plutôt que de conserver tous les ajouts existants à la liste. Dans le dernier exemple d'instanciation (t
), le constructeur passe le paramètre y
dans sa construction, et a donc la liste [10]
comme variable d'instance y
.
Espérons que cela aide. N'hésitez pas à demander plus d'incertitudes que de commentaires. Aussi, je suggère de lire sur la documentation de la classe Python here.
ce que vous entendez par "attribut class instancié"? vous avez déjà créé une liste –
* Je ne peux pas instancier cet attribut dans '__init__' *, mais c'est ce que vous faites .... Je ne comprends pas votre question. –
Est-ce la bonne façon de l'instancier? – user225312