多重继承

关于继承在上一篇博文已经说过了,怎么继承相信你也懂了。那么进入进阶话题,多重继承

1.什么是多重继承

继承的概念你清楚,那么多重继承就简单了。我的理解就是子类继承多个基类

2.怎么多重继承

定义多个基类,然后子类定义时继承多个基类,这就是多重继承。

例1:

python多重继承super父类参数 python多重继承例子_实例化

 

其实就和前面的一般继承是一样的对吧?就只是传入的基类由一个成了两个或多个而已

 

例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('有喉结','声音低沉浑厚','身材高大壮实')


结果:

python多重继承super父类参数 python多重继承例子_实例化_02

这个例子先继承了人类的特性,然后又从父母那继承了特有的属性,体现了多重继承以及继承再继承。如果你很感兴趣,你可以复制代码,自己下去定义一个女儿的子类

 

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


 

python多重继承super父类参数 python多重继承例子_python多重继承super父类参数_03

 

像这样就是组合,程序员,作家,司机看似都没什么关系,但是他们同在一个公交车上这样的特定条件下,他们就有关系了,这种关系是一种横向关系。

3.组合和继承的区别

  • 横向关系即为组合
  • 纵向关系即为继承

 

 

 

组合和多重继承相对类里的用法来说,很少用,但你必须得知道有这种用法。