类变量:可以在类的所有实例间共享的变量
实例变量:实例化后每个实例单独拥有的变量
示例:利用类变量查看以构建的实例个数
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Test(object): num_of_instance = 0 def __init__(self, name): self.name = name Test.num_of_instance += 1 if __name__ == '__main__': print(Test.num_of_instance) t1 = Test('jack') print(Test.num_of_instance) t2 = Test('lucy') print(t1.name , t1.num_of_instance) print(t2.name , t2.num_of_instance)
|
这里还涉及很多变量指向的问题例如以下代码:
不可修改变量时:值传递时
类修改了变量:
1 2 3 4 5 6 7 8 9
| class Person: name="aaa"
p1=Person() p2=Person() Person.name="bbb" print(p1.name) print(p2.name) print(Person.name)
|
实例修改了变量:
1 2 3 4 5 6 7 8 9
| class Person: name="aaa"
p1=Person() p2=Person() p1.name="bbb" print(p1.name) print(p2.name) print(Person.name)
|
值传递的情况下,类变量的变化同步到了实例变量,而实例变量的改变不会影响类
变量可修改时: 引用传递时
类修改了变量
1 2 3 4 5 6 7 8
| class Person: name=[] p1=Person() p2=Person() Person.name.append(1) print(p1.name) print(p2.name) print(Person.name)
|
实例修改了变量:
1 2 3 4 5 6 7 8
| class Person: name=[] p1=Person() p2=Person() p1.name.append(1) print(p1.name) print(p2.name) print(Person.name)
|
引用传递的情况下,类变量的变化同步到了实例变量,而实例变量的改变同步到了类
具体的分析需要查看内存分布情况,但是我没找到详细的解释,这里略过;