Python 实例属性VS类属性1

来源:互联网 发布:xtw100编程器使用说明 编辑:程序博客网 时间:2024/06/11 17:54

# -*- coding:utf-8 -*-import osclass test:     data=1     def __init__(self):          self.a1=0     def test2(self):          print 'hello'          #类中定义了类类型的变量data,下面我们创建对象t,t1,进行逐步分析,对比if __name__=='__main__':     t=test()     t1=test()     #1、看看有啥现象     print 'class test.data',test.data     print 'class id of address', id(test.data)     print '-'*10     print 'object t.data', t.data     print 'Object id of address', id(t.data)     print '-'*10     print 'object t1.data', t1.data     print 'Object id of address', id(t1.data)     print '\n'     #结果如下:     #class test.data 1     #class id of address 19584776     #----------     #object t.data 1     #Object id of address 19584776     #----------     #object t1.data 1     #Object id of address 19584776     #从结果分析看,创建对象,都会引用类属性data属性,而不是copy此属性。     #通过类名和对象t,对象t1的data值和地址都是一样,引用对象1     #2、通过对象t修改data属性     t.data=2     print 'Change t.data=2'     print 'class test.data',test.data     print 'class id of address', id(test.data)     print '-'*10     print 'object t.data', t.data     print 'Object id of address', id(t.data)     print '-'*10     print 'object t1.data', t1.data     print 'Object id of address', id(t1.data)     print '\n'     #本次运行结果如下:     #Change t.data=2     #class test.data 1     #class id of address 19584776     #----------     #object t.data 2     #Object id of address 19584764     #----------     #object t1.data 1     #Object id of address 19584776     #从结果分析看,只有对象t的data属性发生了变化,因为设置或者更新类属性时候,会创建实例属性t.data.     #类属性data属性和类t1 data属性都没变化。     #3、通过类test修改data属性     test.data=10     print 'Change test.data=10'     print 'class test.data',test.data     print 'class id of address', id(test.data)     print '-'*10     print 'object t.data', t.data     print 'Object id of address', id(t.data)     print '-'*10     print 'object t1.data', t1.data     print 'Object id of address', id(t1.data)     print '\n'          #本次运行结果如下:     #Change test.data=10     #class test.data 10     #class id of address 19584668     #----------     #object t.data 2     #Object id of address 19584764     #----------     #object t1.data 10     #Object id of address 19584668     #从结果分析看,修改类的属性,会影响对象中没有修改data属性的对象,如对象t1     #对对象t不影响,t已修改过data属性值。     #4、删除对象的类属性(该属性为常量)     print t.data     del t.data     print t.data     print test.data     print t1.data     print '\n'     #2,先访问到了对象的data属性,类的data属性被遮住了     #10     #10     #10     #第二次删除会报错     print t.data     #del t.data     print t.data               #5、可通过__class__ 属性,修改所有的值     print 'Change t.__class__.data=2'     t.__class__.data= 2     print 'class test.data',test.data     print 'Object t.data', t.data     print 'Object t1.data', t1.data     #结果如下:     #Change t.__class__.data=2     #class test.data 2     #Object t.data 2     #Object t1.data 2                    #总结:     #1、修改对象的类属性值,不会影响类的类属性值。     #2、通过对象设置类的属性,会创建该对象的此属性     #2、修改类的属性值,会影响类属性没有变化的对象。     #3、删除已设置对象的类属性值,不会影响类的该属性


1 0
原创粉丝点击