2010-05-19 3 views
4

У меня есть некоторые сомнения относительно переменных класса python. Как я понимаю, если я определяю переменную класса, объявленную вне функции __init__(), эта переменная будет создаваться только один раз как статическая переменная в C++.Переменные класса Python Вопрос

Это кажется правильным для некоторых типов python, например, для типа dict и list, но для базового типа, например. int, float, не то же самое.

Например:

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() 

Выход:

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

Я понимаю, результаты dict1 и list1, но почему INT1 поведение отличается?

+0

self.int1 = что-то меняет ссылку –

ответ

6

Разница заключается в том, что вы никогда не назначать self.dict1 или self.list1 — вы только когда-либо читать эти поля из класса — тогда вы назначить self.int1, создавая тем самым поле экземпляра, который скрывает поле класса.