首页 > 代码库 > python_8

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 alter13         super(child,self).alter()14         print after parent alter15         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()
View Code

 

技术分享

 

注意:

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

1 class Child(Parent):2  def __init__(self, stuff):3  self.stuff = stuff4  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     
View Code

技术分享

 

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

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

继承和组合的应用场合

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

 

 

python_8