La réponse, en quelques mots
Dans votre exemple, itsProblem
est une variable locale.
Vous devez utiliser self
pour définir et obtenir des variables d'instance. Vous pouvez le définir dans le __init__
méthode. Votre code serait alors le suivant :
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Mais si vous voulez une véritable variable de classe, utilisez directement le nom de la classe :
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
print (Example.itsProblem)
Mais soyez prudent avec celui-ci, car theExample.itsProblem
est automatiquement défini comme étant égal à Example.itsProblem
mais ce n'est pas du tout la même variable et elle peut être modifiée indépendamment.
Quelques explications
En Python, les variables peuvent être créées dynamiquement. Par conséquent, vous pouvez faire ce qui suit :
class Example(object):
pass
Example.itsProblem = "problem"
e = Example()
e.itsSecondProblem = "problem"
print Example.itsProblem == e.itsSecondProblem
imprime
Véritable
Par conséquent, c'est exactement ce que vous faites avec les exemples précédents.
En effet, en Python, nous utilisons self
como this
mais c'est un peu plus que ça. self
est le premier argument de toute méthode objet car le premier argument est toujours la référence de l'objet. C'est automatique, que vous l'appeliez self
ou pas.
Ce qui veut dire que vous pouvez le faire :
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
ou :
class Example(object):
def __init__(my_super_self):
my_super_self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
C'est exactement la même chose. Le premier argument de la méthode ANY object est l'objet courant, nous l'appelons seulement self
comme une convention. Et vous ajoutez juste une variable à cet objet, de la même manière que vous le feriez de l'extérieur.
Maintenant, à propos des variables de classe.
Quand vous le faites :
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
Vous remarquerez que nous avons d'abord définir une variable de classe alors nous avons accès à une variable objet (instance) . Nous n'avons jamais défini cette variable objet mais elle fonctionne, comment est-ce possible ?
Eh bien, Python essaie d'abord d'obtenir la variable objet, mais s'il ne la trouve pas, il vous donnera la variable classe. Attention : la variable de classe est partagée entre les instances, et la variable d'objet ne l'est pas.
En conclusion, n'utilisez jamais les variables de classe pour définir les valeurs par défaut des variables d'objet. Utilisez __init__
pour ça.
Finalement, vous apprendrez que les classes Python sont des instances et donc des objets eux-mêmes, ce qui donne un nouvel aperçu de la compréhension de ce qui précède. Revenez lire cet article plus tard, lorsque vous l'aurez compris.
1 votes
Titre modifié, la question porte en fait sur les variables "statiques" des classes : stackoverflow.com/questions/707380/