因为经过持续,则从左到右查找父类中是否带有方法

#眼前讲的是单继承,Python还匡助多重继承。多重继承的类定义如下:

零基础学习python数据解析——多重继承,科多大数额带你来上学。

1 class DerivedClassName(Base1,Base2,Base3):
2          <statement-1>
3         .
4         .
5         . 
6          <statement-N>

此起彼伏是面向对象编程的一个要害的措施,因为经过持续,子类就足以扩张父类的效用。

#可以见到,多重继承就是有两个基类(父类或超类)。

追忆一下Animal类层次的统筹,假若我们要实现以下4种动物:

#亟待小心圆括号中父类的逐条,若父类中有平等的章程名,在子类使用时未指定,Python会从左到右搜索。若方法在子类中未找到,则从左到右查找父类中是否含有方法。

Dog – 狗狗;

#此起彼伏以前边的Animal类为例,假如要促成4种动物:Dog(狗)、Bat(蝙蝠)、Parrot(鹦鹉)、ostrich(鸵鸟)。

Bat – 蝙蝠;

#虽然遵照哺乳动物和鸟类分类,大家可以计划按哺乳动物分了的类层次图,如图1。如若遵照“会跑”和“会飞”分类,大家可以计划按行为效率分类的类层次图,如图2。

Parrot – 鹦鹉;

#万一要把地方的二种分类都蕴含进来,就得筹划更多层次:

Ostrich – 鸵鸟。

#哺乳类:包含会跑的哺乳类和会飞的哺乳类。

即便依据哺乳动物和鸟类归类,大家得以设计出这么的类的层次:

#鸟儿:包含会跑的小鸟和会飞的飞禽。

图片 1

图片 2

可是要是遵照“能跑”和“能飞”来分类,咱们就相应设计出这般的类的层次:

图片 3

图片 4

图片 5

假诺要把上边的二种分类都蕴含进来,我们就得筹划更多的层系:

#一旦还要加进“宠物类”和“非宠物类”,类的数目就会呈指数增长,分明这样设计是不可行的。

哺乳类:能跑的哺乳类,能飞的哺乳类;

#不错的做法是使用多重继承。首先,紧要的类层次仍听从哺乳类的鸟类设计,设计代码如下:

鸟儿:能跑的小鸟,能飞的飞禽。

 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类:

图片 6

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

图片 7

#对急需Flyable功效的动物添加对Flyable的持续,如Bat:

现行,大家要给动物再添加Runnable和Flyable的功效,只需要先定义好Runnable和Flyable的类:

1 class Bat(Manmmal,Flyable):
2         pass

图片 8

#推行如下语句:

对此急需Runnable效率的动物,就多延续一个Runnable,例如Dog:

1 dog=Dog
2 dog.run

图片 9

#实践结果如下:

对于需要Flyable效用的动物,就多延续一个Flyable,例如Bat:

1 D:\Pythonworkspace>python class_多重继承.py
2 Is Running...

图片 10

#这般,通过上边的一体系继承,一个子类就可以连续六个父类,同时得到四个父类所有非私有效能。

通过多重继承,一个子类就足以同时得到三个父类的富有机能。

 

MixIn

 

在设计类的接续关系时,日常,主线都是单纯继承下去的,例如,Ostrich继承自Bird。不过,即使急需“混入”额外的效益,通过多重继承就足以兑现,比如,让Ostrich除了继续自Bird外,再同时继承Runnable。这种设计一般号称MixIn。

 

为了更好地看看连续关系,我们把Runnable和Flyable改为RunnableMixIn和FlyableMixIn。类似的,你还可以够定义出肉食动物CarnivorousMixIn和植食动物HerbivoresMixIn,让某个动物同时兼有好几个MixIn:

 

图片 11

 

MixIn的目标就是给一个类扩充多少个职能,这样,在设计类的时候,大家事先考虑通过多重继承来组合四个MixIn的意义,而不是计划性多层次的复杂性的后续关系。

 

Python自带的很多库也运用了MixIn。举个例子,Python自带了TCPServer和UDPServer这两类网络服务,而要同时服务多少个用户就务须利用多进程或多线程模型,这二种模型由ForkingMixIn和ThreadingMixIn提供。通过结合,我们就可以创建出卓绝的劳动来。

 

譬如说,编写一个多进程情势的TCP服务,定义如下:

 

图片 12

编排一个多线程形式的UDP服务,定义如下:

图片 13

倘诺您打算搞一个更上进的协程模型,可以编写一个CoroutineMixIn:

图片 14

那样一来,我们不需要复杂而庞大的继承链,只要采用组合不同的类的职能,就足以神速构造出所需的子类。

相关文章