5

我对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 的行为不同呢?

4

1 回答 1

7

不同之处在于您永远不会分配给self.dict1self.list1——您只从类中读取这些字段——而您确实分配给self.int1,因此创建了一个隐藏类字段的实例字段。

于 2010-05-19T12:50:56.323 回答