Python 实例属性VS类属性1
2016-11-27 19:54
267 查看
# -*- coding:utf-8 -*- import os class 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、删除已设置对象的类属性值,不会影响类的该属性
相关文章推荐
- python中类属性和类实例的属性的区别
- python类属性和实例属性
- python下的一些特殊属性(几个实例说明)
- python 类,实例,模块的属性
- [读书笔记]实例属性vs类属性
- python中若类属性与实例属性同名
- python 的 类属性 与 实例属性
- python实例26[查询修改文件的属性]
- python的类属性和实例属性
- python的类属性和实例属性
- python中类属性和类实例的属性的区别
- python 基础学习第二弹 类属性和实例属性
- python的类属性和实例属性
- Python的类实例属性访问规则
- python的类属性和实例属性
- python实例26[查询修改文件的属性]
- python下的一些特殊属性(几个实例说明)
- python之类属性和实例对象属性
- python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法
- Python——类属性/实例属性