2010-05-19 6 views
4

J'ai des doutes sur les variables de classe de Python. Si je comprends bien, si je définis une variable de classe, qui est déclarée en dehors de la fonction __init__(), cette variable ne créera qu'une seule fois en tant que variable statique en C++.Variables de classe Python Question

Cela semble correct pour certains types de python, par exemple, dict et type de liste, mais pour ces types de base, par ex. int, float, n'est pas la même chose.

Par exemple:

class A: 
    dict1={} 
    list1=list() 
    int1=3 

    def add_stuff(self, k, v): 
     self.dict1[k]=v 
     self.list1.append(k) 
     self.int1=k 

    def print_stuff(self): 
     print self.dict1,self.list1,self.int1 

a1 = A() 
a1.add_stuff(1, 2) 
a1.print_stuff() 
a2=A() 
a2.print_stuff() 

La sortie est:

{1: 2} [1] 1 
{1: 2} [1] 3 

Je comprends les résultats de Dict1 et list1, mais pourquoi ne INT1 comportement différent?

+0

self.int1 = quelque chose change la référence –

Répondre

6

La différence est que vous n'attribuez à self.dict1 ou self.list1 — vous ne lisez jamais les champs de la classe — alors que vous n'attribuez à self.int1, créant ainsi un champ d'instance qui cache le champ de la classe.