Вопрос о переменных класса Python - PullRequest
4 голосов
/ 19 мая 2010

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

Это кажется правильным для некоторых типов 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 отличается?

1 Ответ

6 голосов
/ 19 мая 2010

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

...