今天咱们聊点啥呢?要不还是聊点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的类继承相关的东东就先和大家聊这么多吧,咱们下次再见哦![再见]
敬请关注“品位集结号”,为您带来意外的小知识![比心][握手][比心]