Python--多继承

 class F:
     def func(self):
         print('F')


 class A(F):
      def func(self):
          print('A')
     pass

  
 class B(A):
      def func(self):
              print('B')
         pass
    

 class E(F):
     def func(self):
         print('F')


 class C(E):
      def func(self):
          print('C')
     pass


 class D(B, C):
      def func(self):
          print('D')
     pass


 d = D()
 d.func()

以上问题,简化如下

			     ^          F  5
			     |        /   \
#深度优先	     |     2 A      E  4
			     |      |      |
			     |     1 B      C  3
			     |        \    /
			     |           D
			      —————————————————————————> 广度优先

在多继承中 从左到右继承, 如果B找不到,就会找A,如果A也找不到,则会找C,C找不到就会找E,E再找不到才是F

钻石继承 广度优先 Python3的新式类都是广度优先
在Python2中 经典类 深度优先
super的本质

 print(D.mro())

多继承当中,我们子类的对象调用一个方法,默认就是就近原则
经典类中 深度优先
新式类 广度优先
Python2.7 新式类和经典类共存,新式类要继承object
Python3 只有新式类 默认继承object
经典类 和新式类还有一个区别 mro 方法只在新式类中存在
super 只在Python3中存在

class A(object):
def func(self):
print(‘A’)

class B(A):
    def func(self):
        super().func()
        print('B')


class C(A):
    def func(self):
        super().func()
        print('C')


class D(B, C):
    def func(self):
        super().func()
        print('D')


d = D()
d.func()
         
          A
        /   \
       B     C
        \   /
          D
答案: A C B D

*****super的本质 : 不是直接 找父类 而是根据调用者的节点位置的广度优先顺序来的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值