Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1dc1d4b

Browse files
committed
继承和合成
1 parent 2927c1d commit 1dc1d4b

File tree

5 files changed

+161
-0
lines changed

5 files changed

+161
-0
lines changed

ex44a.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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()

ex44b.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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()

ex44c.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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()

ex44d.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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()

ex44e.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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+

0 commit comments

Comments
 (0)