码迷,mamicode.com
首页 > 编程语言 > 详细

python_8

时间:2014-12-25 12:59:16      阅读:165      评论:0      收藏:0      [点我收藏+]

标签:

继承

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()
View Code

 

技术分享

 

注意:

最常见的 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     
View Code

技术分享

 

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

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

继承和组合的应用场合

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

 

 

python_8

标签:

原文地址:http://www.cnblogs.com/wufeng0927/p/4184360.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!