如果说类变量对所有来自这个类的所有实例所共享,那么假如我一个实例去改变了这个类变量(假设使用这样的操作object.类变量 = value)的值,那么对于其他的实例是不是都是可见的?
答案是否定的,下面验证。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class A( object ): # 定义一个类变量,初值是10 class_var = 10 print id (class_var) def foo( self ): print '在类中访问类变量:A.class_var=' , A.class_var print '在类中访问实例变量: self.class_var=' , self , self .class_var # 改变实例变量的值 self .class_var = 40 print '修改后访问类变量:A.class_var=' , A.class_var print '修改后访问实例变量 self.class_var=' , self , self .class_var # 这里的class_var和函数外面的class_var不是同一个东西,这是一个局部变量 class_var = 20 print id (class_var) print 'class_var=' , class_var A.class_var = 15 print 'A.class_var=' , A.class_var print 'class_var=' ,class_var print 'self.class_var=' , self .class_var obj1 = A() obj2 = A() obj3 = A() obj1.foo() print A.class_var print obj1.class_var print obj2.class_var print obj3.class_varOutput:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 49964144 在类中访问类变量:A.class_var = 10 在类中访问实例变量: self .class_var = <__main__.A object at 0x0000000002FD2390 > 10 修改后访问类变量:A.class_var = 10 修改后访问实例变量 self .class_var = <__main__.A object at 0x0000000002FD2390 > 40 49963904 class_var = 20 A.class_var = 15 class_var = 20 self .class_var = 40 15 40 15 15
从上面运行的结果分析:当使用self.class_var形式访问类变量的之后,如果修改self.class_var的值,可以发现,类变量的值没有变化;不放心我们在修改类变量的值,发现self.class_var的值也没有受到影响。从最后打印obj2和obj3这两个都来自于一个类的实例中的类变量都是和修改后的类变量一样,表示他们是共享类变量的。
转载于:https://www.cnblogs.com/valorchang/p/11399932.html