写文章 点击打开何可ke的主页 Python中的菱形继承介绍

在Python中进行面向对象编程时,类继承的熟练运用可以简化代码,增强软件的可维护性。下面,我们就看看类继承中那些有趣的事情。

1、单继承

单继承,即一个子类只有一个父类。在Python中,单继承结构是最常见的,也是最简单的,具体结构如下:

class 子类名(父类):
     def __init(self):
         pass
 
     def method_n(self):
         pass

在该结构中,子类继承父类,父类继承祖父类,直到最顶层的object类。

2、多继承

多继承,即一个子类可以有多个父类,它继承了多个父类的特性。具体结构如下:

class 子类名(父类1,父类2):
     def __init(self):
         pass
 
     def method_n(self):
         pass

一个子类继承多个父类,通常情况下简单地看成是单继承的组合,但是存在菱形继承这种特殊情况。

3、菱形继承

菱形继承又叫钻石继承,是多继承中的特殊情况,子类继承多个父类,而多个父类拥有共同的祖父类,具体结构如下:

class 祖父类名:
     def __init(self):
         pass
 
     def method_n(self):
         pass

class 父类2(祖父类):
     def __init(self):
         pass
 
     def method_n(self):
         pass

class 父类2名(祖父类):
     def __init(self):
         pass
 
     def method_n(self):
         pass

class 子类名(父类1,父类2):
     def __init(self):
         pass
 
     def method_n(self):
         pass

在Pycharm中使用类名调用父类方法的方式模拟下:

使用类名方法的菱形继承

在该代码中,在子类的__init__方法中,通过父类类名调用父类的__init__方法,有多少个父类就调用多少次,运行结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

菱形继承运行结果

从运行结果中可以看出,尽管可以单继承中使用这种方式,但是在菱形继承中使用这种方式不是很合理,同一个祖父类Grandfather的__init__方法被调用了两次。我们知道,在Python中,子类中调用父类中的方法通常使用super()。super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(菱形继承)等种种问题。使用super将上述代码改造如下:

使用super的菱形继承

运行结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用super后的菱形继承运行结果

可以看出,祖父类Grandfather的__init__方法只被调用了一次,这就是我们所需要的结果。

4、结束

为什么使用super后是这样的结果呢?这就需要提到一个叫做MRO的概念,MRO是"Method Resolution Order"的缩写,其实就是继承父类方法时的顺序表,类对象具备相对应的__mro__属性。类对象中的__mro__属性的值是Python通过C3算法计算出来的继承调用顺序,可以通过代码查看:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

打印类对象的__mro__属性

运行结果:

Son类的__mro__

有了MRO,使用super时就能保证初始化时父类只被调用一次。

以上就是“写文章
点击打开何可ke的主页
Python中的菱形继承介绍”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值