python3多继承_python3 面向对象之多继承

python的多继承还是很有特点的,我本身是从事java方向的,多次见到多继承还是很诧异的,记过一段时间的学习发现的多继承还是有独到之处的,也很有意思.

1 classA():2 def __init__(self):3 print("A")4

5

6 classB(A):7 def __init__(self):8 super().__init__()9 print("B")10

11 classC(A):12 def __init__(self):13 super().__init__()14 print("C")15

16 classD(B, C):17 def __init__(self):18 super().__init__()19 print("D")20

21 D()

先来个最简单的多继承来测试一下,你觉得它的输出结果会是什么呢?如果有点吃力的话,看下面的继承关系图,给些提示吧.

输出的结果是:ACBD,学过python的同学肯定知道python的多继承特点是从左到右,深度优先.那么就好好体会这个意思吧,再来道题压压惊.

输出结果是:ACDBE.结合两道题你多少会有些体会,对于图二中的E来说,它的父类有两个B和D,按照关系特点,那么它的继承顺序先B后D,同时调用super()函数,在这里需要用到栈的思想,可以理解为把print()函数依次压入栈中,按照从上至下的顺序分别是DBE,关键的问题就来了,倒是是先调用B类中的super()还是D中的super(),这时你只需要想到栈,你就知道会先调用谁了,没错,就是D类,而D的父类是C类,在初始化D类的同时需要用到父类的方法,那么,就需要将C压入栈中,依次类推,到A类时,A类没有父类,那么,它就可以输出print(),而此时栈中元素从上至下顺序为:ACDBE,这同时也是print()函数调用的顺序.

那么再来到相对复杂一点的.

结果是:ACDBEF.同学,你答对了吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值