首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

提升你的Python编程能力,细说类的继承,拿走不谢

今天咱们聊点啥呢?要不还是聊点Python基础的东东吧,大家已经都知道啦,Python呢是一种面向对象的脚本编程语言,那面向对象的编程语言呢,都会支持面向对象的三大特性,你知道是哪三大特性吗?当然是咱们常常挂在嘴边的封装、继承和多态啦,那今天呢,咱们就先说个用的最多的继承吧,好啦,就重点讲讲Python相关的类的继承啦!

好啦,那咱们就开始聊聊吧!

Python类的定义

首先开门见山说一下哦,Python的类的继承是支持多继承机制的。

那Python的类的继承是怎样的呢?其实呢,Python的类继承很简单哦,就是在定义子类时,将多个父类放在子类后面的圆括号中就可以啦!语法格式如下所示哦:

class SubClass (SuperClass1, SuperClass2, ...)

看到了吗,Python类的继承定义的格式是不是很简单哦!只要在子类的后面加个圆括号,然后在括号里面添加上所要继承的父类就可以啦!

其实呢,Python类和其他面向对象语言是一样滴,如果不显示定义继承一个父类,也是有个默认的公共父类哦,它就是object类,所以呀,object类是所有Python类的父类哦,有两种可能哦,一种可能是其直接父类,另一种可能呢当然就是其间接父类啦!

其实呢,如果从Python子类和其父类两个角度来看的话,是两种不同的效果哦,子类呢就相当于对父类进行了扩展啦,而父类呢则是派生出子类啦!

好啦,为了让大家对Python类的继承有深入的理解,咱们还是老规矩啦,举个“栗子”:

好啦,看到了吗,上面的“栗子”程序中呢,定义了两个父类,分别是Animal类和Pig类哦,然后呢,定义了一个子类Peggy,它继承了两个父类,这个Peggy子类呢并木有定义自己的程序单元哦,所以就用pass代替啦!

这样,当主程序创建了Peggy类对象后呢,就可以访问Peggy类中的对象啦,分别是继承自父类Animal的info()方法和继承自Pig类的taste()方法,这就是继承的强大作用,就是相当于子类Peggy扩展了父类Animal和Pig哦。

好啦,咱们运行一下上面这个“栗子”看看结果吧:

Python的多继承

前面咱们说啦,Python是支持多继承的,但是呢,还是不建议大家用哦,因为多继承干的活单继承都能干哦,而且,单继承在流程和思路来说更为清晰和易懂哦!

到这可能大家有问题啦:人家Python自身都支持多继承啦,你为啥还不推荐大家用呢,存在和支持就是有道理的啊?好啦,为了解答大家的这个疑惑,咱们就来聊聊多继承的弊端吧!

首先呢,咱们来假定一个场景,就是哈,当一个子类有多个直接父类,也就是多继承的话,这个子类呢就会继承得到它的所有父类的方法哦,这是大家所清楚的,但是呢,如果这个子类所继承的多个父类中存在同名的方法时呢,这时会出现什么情况呢?在这呢,俺先卖个关子,咱们还是老惯例,举个“栗子”让大家看看啦,这样印象更深刻哦!

好啦,看到上面这个“栗子”了吗,咱们分别定义了两个父类SuperClass1和SuperClass2,这两个父类呢,有个共同点,就是包含相同的info()方法哦,这是咱们再定义一个继承了这两个父类的子类SubClass,这时呢,咱们再主程序中创建了子类SubClass的对象,然后用子类对象sc去调用info()方法,你们猜这是会发生什么情况呢?

可以运行一下看看哦:

看到了吗,运行后输出的是父类SuperClass1中的info()方法!在这先不给大家解释哦,咱们修改一下上面的“栗子”,将SubClass子类所继承的两个父类的顺序调换一下,看看结果如何哦,程序就编程如下样式啦:

将两个父类的继承顺序进行了位置调换哦,这时咱们再运行看看结果如何哦:

看到了吗,这时输出的是父类SuperClass2中的info()方法哦!

好啦,到这呢,可能已经由朋友看明白了,其实呢,在Python的多继承中,如果子类所继承的父类中出现了相同的方法,这时就会和子类所继承的父类的顺序有关哦,排在前面的父类中的方法就会遮盖排在后面的父类中的方法哦!当然啦,如果子类所继承的父类中没有相同的方法,就和父类的顺序没有关系啦,因为子类所调用的父类的方法会按所继承的父类的顺序查找,这时父类因为没有相同的方法,也就是方法是唯一的,它就是找到这个方法所在的父类,然后进行调用哦!对于这点大家一定要牢记哦!

好啦,关于Python多继承的弊端,相信大家通过上面的介绍已经深刻理解了哈,因此呢,还是建议大家尽量少用多继承哦!

好啦,今天关于Python的类继承相关的东东就先和大家聊这么多吧,咱们下次再见哦!

敬请关注“品位集结号”,为您带来意外的小知识!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20201118A0HTCH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券