File tree Expand file tree Collapse file tree 5 files changed +161
-0
lines changed Expand file tree Collapse file tree 5 files changed +161
-0
lines changed Original file line number Diff line number Diff line change
1
+ #coding:utf-8
2
+ #################
3
+ # 习题44a:继承--隐式继承
4
+ #################
5
+ # 前言
6
+ # 隐式继承
7
+
8
+ class Parent (object ):
9
+
10
+ def implicit (self ):
11
+ print "PARENT implicit()"
12
+
13
+ class Child (Parent ):
14
+ pass
15
+
16
+ dad = Parent ()
17
+ son = Child ()
18
+
19
+ dad .implicit ()
20
+ son .implicit ()
Original file line number Diff line number Diff line change
1
+ #coding:utf-8
2
+ #################
3
+ # 习题44b:继承--显示覆盖
4
+ #################
5
+ # 前言
6
+ # 显示覆盖
7
+
8
+ class Parent (object ):
9
+
10
+ def override (self ):
11
+ print "PARENT override()"
12
+
13
+ class Child (Parent ):
14
+
15
+ def override (self ):
16
+ print "CHILD override()"
17
+
18
+ dad = Parent ()
19
+ son = Child ()
20
+
21
+ dad .override ()
22
+ son .override ()
Original file line number Diff line number Diff line change
1
+ #coding:utf-8
2
+ #################
3
+ # 习题44c:继承--在运行前或运行后替换
4
+ #################
5
+ # 前言
6
+ # 第三种方法是一个覆盖的特例,你想在父类中定义的内容运行之前
7
+ # 或之后再修改行为。
8
+
9
+ class Parent (object ):
10
+
11
+ def altered (self ):
12
+ print "PARENT altered()"
13
+
14
+
15
+ class Child (Parent ):
16
+
17
+ def altered (self ):
18
+ print "CHILD, BEFORE PARENT altered()"
19
+ super (Child , self ).altered ()
20
+ print "CHILD, AFTER PARENT altered()"
21
+
22
+ dad = Parent ()
23
+ son = Child ()
24
+
25
+ dad .altered ()
26
+ son .altered ()
Original file line number Diff line number Diff line change
1
+ #coding:utf-8
2
+ #################
3
+ # 习题44d:继承--三种方式组合使用
4
+ #################
5
+ # 前言
6
+ # 第三种方法的混合使用
7
+
8
+ class Parent (object ):
9
+
10
+ def override (self ):
11
+ print "PARENT override()"
12
+
13
+ def implicit (self ):
14
+ print "PARENT implicit()"
15
+
16
+ def altered (self ):
17
+ print "PARENT altered()"
18
+
19
+ class Child (Parent ):
20
+
21
+ def override (self ):
22
+ print "CHILD, override()"
23
+
24
+ def altered (self ):
25
+ print "CHILD, BEFORE PARENT altered()"
26
+ super (Child , self ).altered ()
27
+ print "CHILD, AFTER PARENT altered()"
28
+
29
+ dad = Parent ()
30
+ son = Child ()
31
+
32
+ dad .implicit ()
33
+ son .implicit ()
34
+
35
+ dad .override ()
36
+ son .override ()
37
+
38
+ dad .altered ()
39
+ son .altered ()
Original file line number Diff line number Diff line change
1
+ #coding:utf-8
2
+ #################
3
+ # 习题44e:合成
4
+ #################
5
+ # 前言
6
+ #
7
+
8
+ class Other (object ):
9
+
10
+ def override (self ):
11
+ print "OTHER override()"
12
+
13
+ def implicit (self ):
14
+ print "OTHER implicit()"
15
+
16
+ def altered (self ):
17
+ print "OTHER altered()"
18
+
19
+ class Child (object ):
20
+
21
+ def __init__ (self ):
22
+ self .other = Other () # 主要理解这里——类的合成
23
+
24
+ def implicit (self ):
25
+ self .other .implicit ()
26
+
27
+ def override (self ):
28
+ print "CHILD override()"
29
+
30
+ def altered (self ):
31
+ print "CHILD, BEFORE OTHER altered()"
32
+ self .other .altered ()
33
+ print "CHILD, AFTER OTHER altered()"
34
+
35
+ son = Child ()
36
+
37
+ son .implicit ()
38
+ son .override ()
39
+ son .altered ()
40
+
41
+ # 笔记
42
+ # 继承与合成就是为了解决关于代码复用的问题
43
+ # 继承可以让你在基类里隐含父类的功能
44
+ # 合成是利用模块和别的类中的函数调用达到了代码复用的问题
45
+
46
+ # 需要注意的是:
47
+ # 1.不惜一切代价避免多重继承,因为他会带来很多麻烦。如果非要用
48
+ # 那就要准备好专研类的层次记过,以及花时间去找各种东西得来龙去脉
49
+ # 2.如果有一些代码会在不同位置和场合应用到,那就用合成来吧他们做成模块
50
+ # 3. 只有代码之间有清楚的关联,可以通过一个单独的共性联系起来的时候使用
51
+ # 继承,或者受现有代码或者别的不可抗拒因素所限非用不可,那就用吧!
52
+ #
53
+ #
54
+
You can’t perform that action at this time.
0 commit comments