前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|类的多重继承及super()的调用

Python|类的多重继承及super()的调用

作者头像
算法与编程之美
发布2020-03-25 17:38:00
1.4K0
发布2020-03-25 17:38:00
举报

在python类中有关子类的多重继承所涉及的问题。如super函数,若是多个子类继承自相同的父类与不同的父类会有什么不同?当子类存在多个父类时,继承的先后顺序是怎样的?一起来探究一下其中的规律。

解决方案

代码示例:

class A(object): def __init__(self): print('A') super(A,self).__init__()class B(object): def __init__(self): print('B') super(B,self).__init__()class C(A): def __init__(self): print('C') super(C,self).__init__()class D(A): def __init__(self): print('D') super(D,self).__init__()class E(B,C): def __init__(self): print('E') super(E,self).__init__()class F(C,D): def __init__(self): print('F') super(F,self).__init__()class G(D,C,B): def __init__(self): print('G') super(G,self).__init__()if __name__=='__main__': f=F() g=G()

该代码涉及到多重继承问题,其中还涉及到了super这个函数。

运行这串代码会得到如下结果:

图 1 子类的多重继承

这时细心的朋友可能会提出问题:为什么当子类F继承C时,为什么C没有继续去继承A,而作为F的另一个父类D却去继承了A?这时就出现了这个C,D作为A的子类,同时又作为A的父类,当他们继承相同的父类A时,还要考虑到super函数的用法。

super函数的用法:

由上述代码可知,子类利用super函数来调用父类(超类),同理super()函数的语法:

super(type[,object-or-type])

含义:type=类object-or-type=类,一般是self。

如上述C作为例子;用法:

super(C.self).__init__()

首先super函数会找到C的父类(A),然后把C的类对象转化为父类(A)的类对象,然后调用父类对象的方法。

由上述的分析及结果可以得到一个结论:当多重继承中存在多个子类同时继承相同的父类时,且自身作为父类时(C,D均为F的父类),例如C,D两个子类同时去继承相同的父类(A)时,利用super()函数只会在最后一个调用父类(即D调用A)。

那若是不同的父类,那会出现什么情况呢?看如下代码:

class A(object): def __init__(self): print('A') super(A,self).__init__()class B(object): def __init__(self): print('B') super(B,self).__init__()class C(A): def __init__(self): print('C') super(C,self).__init__()class D(B): def __init__(self): print('D') super(D,self).__init__()class E(B,C): def __init__(self): print('E') super(E,self).__init__()class F(C,D): def __init__(self): print('F') super(F,self).__init__()class G(D,C,B): def __init__(self): print('G') super(G,self).__init__()if __name__=='__main__': f=F() g=G()

当D的父类变为B时,输出结果变为:

图 2 结果

由此可见,当父类变为不同时,super()就会分别调用各个父类,并输出每一个调用的父类,例子中的C,D就会分别调用他们的父类A和B,这样就会输出上述的结果。

结语

涉及多重继承关系中super()函数并不是去让子类继承父类并输出,而是将自身,即子类的对象转化为父类的对象并调用父类,明白这一点问题就迎刃而解了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档