多重继承
关于继承在上一篇博文已经说过了,怎么继承相信你也懂了。那么进入进阶话题,多重继承
1.什么是多重继承
继承的概念你清楚,那么多重继承就简单了。我的理解就是子类继承多个基类
2.怎么多重继承
定义多个基类,然后子类定义时继承多个基类,这就是多重继承。
例1:
其实就和前面的一般继承是一样的对吧?就只是传入的基类由一个成了两个或多个而已
例2:定义一个儿子继承父母特征的子类
class Human: def __init__(self): self.head=1 self.hands=2 self.legs=2 def walk(self): print('白天散步') def eat(self): print('补充能量') def sleep(self): print('晚上睡觉') class Man(Human): def __init__(self,houjie,voice,figure): Human.__init__(self) self.houjie=houjie self.voice=voice self.figure=figure def psychological(self): print('爱探索,爱冒险') class Women(Human): def __init__(self,houjie,voice,figure): Human.__init__(self) self.houjie=houjie self.voice=voice self.figure=figure def dothings(self): print('处事态度认真,细腻') class Son(Man,Women): def thought(self): print('思想单纯天真') s=Son('有喉结','声音低沉浑厚','身材高大壮实')
结果:
这个例子先继承了人类的特性,然后又从父母那继承了特有的属性,体现了多重继承以及继承再继承。如果你很感兴趣,你可以复制代码,自己下去定义一个女儿的子类
3.注意:多重继承,看起来代码很乱,所以尽量不要使用,容易产生BUG
4.继承和装饰器
前面讲解的装饰器和现在的继承其实是不是有很多相似的地方?是的,很多,因为有了继承和下面的组合,所以在实际开发中基本很少用装饰器来写框架啥的,比如web模块—django,都已经自带框架,哪还需要用装饰器啊?所以这也是装饰器被冷落的原因,但是装饰器是很强大的,多利用,在面试时如果懂装饰器是加分的
组合
1.什么是组合
即把类和实例化放到一个新类里,把旧类组合进去,不用继承,让横向的不是很有直接关系的类放到一起就是组合。好像没明白吧,不急,往下看
2.怎么组合
方法和继承差不多,将类作为参数传进去
例:
class programmer: def __init__(self,num1): self.num=num1 class writer: def __init__(self,num2): self.num=num2 class driver: def __init__(self,num3): self.num=num3 class Bus: def __init__(self,num1,num2,num3): self.programmer=programmer(num1) self.writer=writer(num2) self.driver=driver(num3) def sum_num(self): print ('公交车上一共有%d个程序员,%d个作家,%d个司机'%(self.programmer.num,self.writer.num,self.driver.num)) bus=Bus(2,3,1) bus.sum_num()
像这样就是组合,程序员,作家,司机看似都没什么关系,但是他们同在一个公交车上这样的特定条件下,他们就有关系了,这种关系是一种横向关系。
3.组合和继承的区别
- 横向关系即为组合
- 纵向关系即为继承
组合和多重继承相对类里的用法来说,很少用,但你必须得知道有这种用法。