Python类的特点 (2) :类属性与实例属性的关系

测试代码:

 #encoding:utf-8
class Parent(object):
x=1 #x是Parent类的属性(字段)
ls=[1,2] #ls是一个列表,也是Parent类的属性(字段) class Child1(Parent):
y=2 class Child2(Parent):
pass if __name__=='__main__':
'''对于类属性:子类与父类的关系是,如果子类重写了继承的值就用子类自己的属性值,否则就用父类的属性值'''
print Parent.x,Child1.x,Child2.x
Child1.x=2
print Parent.x,Child1.x,Child2.x
Parent.x=3
print Parent.x,Child1.x,Child2.x
print '--------------------' '''类属性和实例属性的关系:'''
'''#1:若实例的属性值没有重新赋值,则类属性值的改变也会导致实例的属性值的改变。'''
p=Parent()
print Parent.x,p.x
Parent.x=5
print Parent.x,p.x
print '--------------------' '''#2:对于不可变类型(数值型、bool型、字符串型等)的属性值,若实例的属性值已经重新赋值,则类的属性值与该实例的属性值相互独立,互不影响。'''
p.x=11
print Parent.x,p.x
Parent.x=6
print Parent.x,p.x
print '--------------------' '''#3.对于可变类型(数值型、bool型、字符串型等)的属性值,实例的属性值和类的属性值,两者是是始终相关联的,实例属性值的改变会引起类属性值的改变,反之亦然。'''
print Parent.ls,p.ls
p.ls.append(3)
print Parent.ls,p.ls
p2=Parent()
p2.ls.append(4)
print p.ls,p2.ls,Parent.ls
print '--------------------' Parent.ls.append(9)
print Parent.ls,p.ls
print '--------------------' '''临时对不存在的实例属性进行赋值,是允许的,但只对该实例对象有效,对类及其他实例对象无效'''
p3=Parent()
p.w=12
print p.w
print p3.w #有时报错,有时不报错,应该是编译器Python2.7.11的bug,正常应该报错
print Parent.w #报错 '''临时对不存在的类属性进行赋值,也是允许的,并且会影响所有实例'''
Parent.newField=10
print Parent.newField,p.newField,p2.newField,p3.newField#均为10

输出结果:(忽略第53、54行的错误的话)

1 1 1
1 2 1
3 2 3
--------------------
3 3
5 5
--------------------
5 11
6 11
--------------------
[1, 2] [1, 2]
[1, 2, 3] [1, 2, 3]
[1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4]
--------------------
[1, 2, 3, 4, 9] [1, 2, 3, 4, 9]
--------------------
12
10 10 10 10
上一篇:2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>


下一篇:Spring Cloud(Dalston.SR5)--Eureka 注册中心高可用-服务提供和消费