python_8

继承

1.隐式继承( Implicit Inheritance)
首先我将向你展示当你在父类里定义了一个函数,但没有在子类中定义的例子,这时候会发生隐式继承。

2.显式覆写( Explicit Override)
有时候你需要让子类里的函数有一个不同的行为,这种情况下隐式继承是做不到的,而你需要覆写子类
中的函数,从而实现它的新功能。你只要在子类 Child 中定义一个相同名称的函数就可以了

3.在运行前或运行后覆写
第三种继承的方法是一个覆写的特例,这种情况下,你想在父类中定义的内容运行之前或者之后再修改
行为。

 1 class parent(object):
 2     def override(self):
 3         print ‘parent override()‘
 4     def implicit(self):
 5         print ‘parent implicit()‘
 6     def alter(self):
 7         print ‘parent alter()‘
 8 class child(parent):
 9     def override(self):
10         print ‘child override()‘
11     def alter(self):
12         print ‘before parent alter‘
13         super(child,self).alter()
14         print ‘after parent alter‘
15
16 dad=parent()
17 son=child()
18
19 #隐式继承
20 dad.implicit()
21 son.implicit()
22 #显示继承
23 dad.override()
24 son.override()
25
26 dad.alter()
27 son.alter()

注意:

最常见的 super() 的用法是在基类的 __init__ 函数中使用。 通常这也是唯一可以进行这种操作的地方,
在这里你在子类里做了一些事情, 然后完成对父类的初始化。这里是一个在 Child 中完成上述行为的例
子:

1 class Child(Parent):
2  def __init__(self, stuff):
3  self.stuff = stuff
4  super(Child, self).__init__()

这和上面的 Child.alter 差别不大, 只不过我在 __init__ 里边先设了个变量, 然后才用
Parent.__init__ 初始化了 Parent

=============================================================================

=============================================================================

合成

合成和继承差不多,可以实现相同的功能,就是直接使用别的类或者模块,而非依赖于继承。

继承中三种有两种是通过新代码取代或者修改父类的功能,这其实可以通过调用模块里面的函数来实现。

 1 class Other(object):
 2     def override(self):
 3         print ‘other override()‘
 4     def implicit(self):
 5         print ‘other implicit()‘
 6     def alter(self):
 7         print ‘other alter()‘
 8 class child(object):
 9     def __init__(self):
10         self.other=Other()
11     def override(self):
12         self.other.override()
13     def implicit(self):
14         print ‘child implicit()‘
15     def alter(self):
16         print ‘before child alter()‘
17         self.other.alter()
18         print ‘after child alter()‘
19
20 son = child()
21 son.override()
22 son.implicit()
23 son.alter()
24     

=============================================================================

=============================================================================

继承和组合的应用场合

1. 不惜一切代价地避免多重继承,它带来的麻烦比能解决的问题都多。如果你非要用,那你得准备
好专研类的层次结构,以及花时间去找各种东西的来龙去脉吧。
2. 如果你有一些代码会在不同位置和场合应用到,那就用合成来把它们做成模块。
3. 只有在代码之间有清楚的关联,可以通过一个单独的共性联系起来的时候使用继承, 或者你受现
有代码或者别的不可抗拒因素所限非用不可的话,那也用吧。

 

时间: 2024-10-19 04:24:04

python_8的相关文章

python_8(模块)

第1章 模块 1.1 概述 1.2 模块的分类 1.2.1 内置模块 1.2.2 扩展模块 1.2.3 模块安装 1.2.4 自定义模块第2章 模块之内置模块 2.1 collections模块 2.1.1 collections数据类型 2.1.2 nametuple 2.1.3 可命名元组 2.1.4 queue 模块 2.1.5 Ordereddict有序字典 2.1.6 defaultfict 默认字典 2.2 time模块 2.2.1 sleep 2.3 时间的表示格式 2.3.1 时