Python学习26:类属性vs实例属性

来源:互联网 发布:淘宝客自动采集推广 编辑:程序博客网 时间:2024/06/07 07:01

类属性访问(只能通过"类.属性"的方式修改类的属性)

类属性可以通过类或者实例来访问。

#FileName : classAvr.py#定义一个普通类,测试类属性class C(object):    fooc = 100    #构建一个实例c = C()print('类属性:C.fooc = ',C.fooc)           #foo = 100print('通过对象实例测试属性c.fooc = ',c.fooc)   #foo = 100print(id(C.fooc),' ',id(c.fooc))#通过实例修改属性(会创建一个实例属性fooc,因为任何对实例属性的赋值都会创建一个实例属性(如果不存在),这个实例属性会屏蔽对类属性的访问)c.fooc = 2000#再次打印类属性print('类属性:C.fooc = ',C.fooc)           #foo = 100print('通过对象实例测试属性c.fooc = ',c.fooc)   #foo = 2000print(id(C.fooc),' ',id(c.fooc))del c.foocprint('类属性:C.fooc = ',C.fooc)           #foo = 100print('通过对象实例测试属性c.fooc = ',c.fooc)   #foo = 100


我们只有使用引用fooc的时候,才能更新它的值,如C.fooc.

通过实例c.fooc更新类类属性(不可以),实例会创建一个实例属性fooc。这个实例属性会屏蔽类属性。只有实例属性被清除之后,才能通过实例查看类属性

 

类属性可变的情况(类属性为:字典、列表、集合的情况)可以通过实例修改类型属性

#定义另一个普通类,测试类属性class B(object):    ls = ['Hello','Python','World']    #构建对象实例b = B()#打印属性print('B.ls = ',B.ls)                    #['Hello', 'Python', 'World']print('b.ls = ',b.ls)                    #['Hello', 'Python', 'World']#通过对象实例删除ls中的一项b.ls.pop(1)print('B.ls = ',B.ls)                    #['Hello', 'World']print('b.ls = ',b.ls)                    #['Hello', 'World']#定义一个类用于测试类属性为集合的情况class A(object):    s = set('Hello')#构建实例a = A()print(a.s)#通过实例更新类属性a.s.add('aaa')print(A.s)


python中的类属性只是存储与类相关的数据,和该类的实例无关。类属性和java中的静态成员变量类似。访问python的类属性可使用类名+“.”+属性名的方式,

如果类的实例没有同名变量也可以使用实例来访问。如果实例含有与类属性同名的属性,则用该实例访问属性时,访问的是实例中的属性。

 

 

 

 

 

0 0
原创粉丝点击