多重继承
关于继承在上一篇博文已经说过了,怎么继承相信你也懂了。那么进入进阶话题,多重继承
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.组合和继承的区别
- 横向关系即为组合
- 纵向关系即为继承
组合和多重继承相对类里的用法来说,很少用,但你必须得知道有这种用法。