Python类变量和实例变量 -02

2017-03-18  本文已影响5849人  嘿嘿_小于同学

1、类变量、实例变量概念

2、访问

如果说类变量对所有来自这个类的所有实例所共享,那么假如我一个实例去改变了这个类变量(假设使用这样的操作object.类变量 = value)的值,那么对于其他的实例是不是都是可见的?

答案是否定的,下面验证。

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_var

Output:

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这两个都来自于一个类的实例中的类变量都是和修改后的类变量一样,表示他们是共享类变量的。

3、总结

上一篇 下一篇

猜你喜欢

热点阅读