测试代码:
1 #encoding:utf-8
2 class Parent(object):
3 x=1 #x是Parent类的属性(字段)
4 ls=[1,2] #ls是一个列表,也是Parent类的属性(字段)
5
6 class Child1(Parent):
7 y=2
8
9 class Child2(Parent):
10 pass
11
12 if __name__=='__main__':
13 '''对于类属性:子类与父类的关系是,如果子类重写了继承的值就用子类自己的属性值,否则就用父类的属性值'''
14 print Parent.x,Child1.x,Child2.x
15 Child1.x=2
16 print Parent.x,Child1.x,Child2.x
17 Parent.x=3
18 print Parent.x,Child1.x,Child2.x
19 print '--------------------'
20
21 '''类属性和实例属性的关系:'''
22 '''#1:若实例的属性值没有重新赋值,则类属性值的改变也会导致实例的属性值的改变。'''
23 p=Parent()
24 print Parent.x,p.x
25 Parent.x=5
26 print Parent.x,p.x
27 print '--------------------'
28
29 '''#2:对于不可变类型(数值型、bool型、字符串型等)的属性值,若实例的属性值已经重新赋值,则类的属性值与该实例的属性值相互独立,互不影响。'''
30 p.x=11
31 print Parent.x,p.x
32 Parent.x=6
33 print Parent.x,p.x
34 print '--------------------'
35
36 '''#3.对于可变类型(数值型、bool型、字符串型等)的属性值,实例的属性值和类的属性值,两者是是始终相关联的,实例属性值的改变会引起类属性值的改变,反之亦然。'''
37 print Parent.ls,p.ls
38 p.ls.append(3)
39 print Parent.ls,p.ls
40 p2=Parent()
41 p2.ls.append(4)
42 print p.ls,p2.ls,Parent.ls
43 print '--------------------'
44
45 Parent.ls.append(9)
46 print Parent.ls,p.ls
47 print '--------------------'
48
49 '''临时对不存在的实例属性进行赋值,是允许的,但只对该实例对象有效,对类及其他实例对象无效'''
50 p3=Parent()
51 p.w=12
52 print p.w
53 print p3.w #有时报错,有时不报错,应该是编译器Python2.7.11的bug,正常应该报错
54 print Parent.w #报错
55
56 '''临时对不存在的类属性进行赋值,也是允许的,并且会影响所有实例'''
57 Parent.newField=10
58 print Parent.newField,p.newField,p2.newField,p3.newField#均为10
59
输出结果:(忽略第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