python instance de classe les variables et les variables de classe

Je vais avoir un problème de compréhension de la façon dont la classe /instance des variables en Python. Je ne comprends pas pourquoi quand j'ai essayer ce code, la variable de liste semble être une variable de classe

class testClass():
    list = []
    def __init__(self):
        self.list.append('thing')

p = testClass()
print p.list

f = testClass()
print f.list

De sortie:

['thing']
['thing', 'thing']

et quand je fais cela il semble être une variable d'instance

class testClass():
    def __init__(self):
        self.list = []
        self.list.append('thing')

p = testClass()
print p.list

f = testClass()
print f.list

De sortie:

['thing']
['thing']
  • Si je comprends bien, vous demandez la logique derrière le design particulier de la décision concernant Python syntaxe. Pour de telles questions, la meilleure réponse est "parce qu'il s'adapte à la langue de l'esprit", ou plus flagrante: "demander à son créateur".
  • ok, donc les variables sont des variables de classe par défaut, c'est la où ma confusion découle, qui aurait été à ma question, ne les variables par défaut pour les variables de classe
  • Non, les variables ne sont PAS variables de classe par défaut. En Python, vous ne déclarez pas varables. D'ailleurs, ils ne sont pas réellement des variables (python est un variableless lanuage), juste des noms. Et vous ne déclarez pas ou assing noms, vous les lier à un objet. Et chaque objet de la durée de fonctionnement est un dictionnaire de noms de l'objet. Et même si les deux objets sont de la même classe, ils peuvent être très différents dictionnaires.
  • Dans ton premier exemple, vous avez créé un véritable ressource partagée entre tous les membres de la classe MyClass. Vous ensuite à privatiser le contenu de l'une des caractéristiques communes à chaque membre de la classe MyClass.
  • double possible de Comment puis-je éviter d'avoir Python classe de données partagées entre les instances?
  • Le même problème se produit en Javascript pour des raisons un peu différentes. En tant que programmeur javascript je ne suis pas surpris, quand j'ai commencé à apprendre le Python. En fait je m'y attendais, c'est comment j'ai trouvé ce post.