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