码迷,mamicode.com
首页 > 其他好文 > 详细

多重继承

时间:2017-12-12 15:01:42      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:多重继承   指定   utf-8   宠物   子类   logs   支持   body   base   

#前面讲的是单继承,Python还支持多重继承。多重继承的类定义如下:
1 class DerivedClassName(Base1,Base2,Base3):
2          <statement-1>
3         .
4         .
5         . 
6          <statement-N>
#可以看到,多重继承就是有多个基类(父类或超类)。
#需要注意圆括号中父类的顺序,若父类中有相同的方法名,在子类使用时未指定,Python会从左到右搜索。若方法在子类中未找到,则从左到右查找父类中是否包含方法。
#继续以前面的Animal类为例,假设要实现4种动物:Dog(狗)、Bat(蝙蝠)、Parrot(鹦鹉)、ostrich(鸵鸟)。
#如果按照哺乳动物和鸟类分类,我们可以设计按哺乳动物分了的类层次图,如图1。如果按照“会跑”和“会飞”分类,我们可以设计按行为功能分类的类层次图,如图2。
#如果要把上面的两种分类都包含进来,就得设计更多层次:
#哺乳类:包含会跑的哺乳类和会飞的哺乳类。
#鸟类:包含会跑的鸟类和会飞的鸟类。
技术分享图片
技术分享图片
技术分享图片
#如果还要增加“宠物类”和“非宠物类”,类的数量就会呈指数增长,显然这样设计是不可行的。
#正确的做法是采用多重继承。首先,主要的类层次仍按照哺乳类的鸟类设计,设计代码如下:
 1 #! /usr/bin/python
 2 #-*-coding:UTF-8-*-
 3 #class_多重继承
 4 
 5 class Animal(object):
 6     pass
 7 
 8 #大类:
 9 class Mammal(Animal):
10     pass
11 
12 class Bird(Animal):
13     pass
14 
15 #各种动物:
16 class Dog(Mammal):
17     pass
18 
19 class Bat(Mammal):
20     pass
21 
22 class Parrot(Mammal):
23     pass
24 
25 class Ostrich(Mammal):
26     pass
#接下来,给动物加上Runnable和Flyable功能。我们先定义好Runnable和Flyable类:
1 class Runnable(object):
2     def run(self):
3         print(Is Running...)
4 
5 class Flyable(object):
6     def fly(self):
7         print(Is Flying...)
#大类定义好后,对需要Runnable功能的动物对Runnable的继承,如Dog:
1 class Dog(Mammal,Runnable):    
2         pass
#对需要Flyable功能的动物添加对Flyable的继承,如Bat:
1 class Bat(Manmmal,Flyable):
2         pass
#执行如下语句:
1 dog=Dog
2 dog.run
#执行结果如下:
1 D:\Pythonworkspace>python class_多重继承.py
2 Is Running...
#这样,通过上面的多重继承,一个子类就可以继承多个父类,同时获得多个父类所有非私有功能。
 
 
 
 
 
 
 
 

多重继承

标签:多重继承   指定   utf-8   宠物   子类   logs   支持   body   base   

原文地址:http://www.cnblogs.com/DLHe/p/8027402.html

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