html tool

2015年11月9日星期一

python类变量与c++区别


######################################################
#add:http://www.jb51.net/article/54286.htm
#可以发现:python的类变量和C++的静态变量不同,并不是由类的所有对象共享。
#类本身拥有自己的类变量(保存在内存),当一个TestClass类的对象被构造时,会将当前类变量拷贝一份给这个对象,当前类变量的值是多少,这个对象拷贝得到的类变量的值就是多少;而且,通过对象来修改类变量,并不会影响其他对象的类变量的值,因为大家都有各自的副本,更不会影响类本身所拥有的那个类变量的值;只有类自己才能改变类本身拥有的类变量的值。
# [popexizhi]应该是对象在使用类的变量时才产生的这个副本,也就是是说对象的这个副本内容决定于首次使用时的类变量值而不是对象构造时参见如下[add popexizhi]
class TestClass(object):
    val1 = 100
   
def __init__(self):
    self.val2 = 200
   
def fcn(self,val = 400):
    val3 = 300
    self.val4 = val
    self.val5 = 500
if __name__ == '__main__':
    inst = TestClass()  
    inst1 = TestClass()
    inst2 = TestClass() #[add popexizhi] 此时100

    print "TestClass.val1 # 100:%s" % TestClass.val1 # 100
    print "inst1.val1   # 100:%s" % inst1.val1   # 100
 
    inst1.val1 = 1000 
    print "inst1.val1   # 1000:%s" % inst1.val1   # 1000
    print "TestClass.val1 # 100:%s" % TestClass.val1 # 100
 
    TestClass.val1 =2000
    print "inst1.val1   # 1000:%s" % inst1.val1   # 1000
    print "TestClass.val1 # 2000:%s" % TestClass.val1 # 2000
 
    #print "inst2.val1   # 2000   :%s" % inst2.val1   # 2000   
 
    inst3 = TestClass() 
    print "inst3.val1   # 2000:%s" % inst3.val1   # 2000
    TestClass.val1 =200
    print "inst2.val1   # 2000   :%s" % inst2.val1   # [add popexizhi] 200 首次使用
    

没有评论:

发表评论