最新消息:

python青少年编程第三季——09、继承父类的父类和多态的实现

Python 少儿编程 1572浏览 0评论
Python青少年编程第三季

各位小伙伴大家好:

上期简单的和大家聊了一下类的继承,下面我们接着聊。

 

到目前为止,我们知道了一个类可以通过继承来获得父类中的属性和方法。那如果父类也继承了另一个类呢?那么另一个类中的方法在子类中还可以用吗?

 

换句话说子类可以通过继承父类,来获得父类的父类中的方法和属性吗?

 

答案是肯定的,类就是现实世界的抽象,在现实世界我们可以通过继承来获得家族的传家宝。同样,类也可以通过继承来获得(祖类)中的方法。

 

下面来看段示例程序:

 

python青少年编程第三季——09、继承父类的父类和多态的实现

 

上面的代码在上期的基础上新建了一个波斯猫类(Persian_Cat),这个类只写了一个spray_fire方法。

 

但是它继承了Cat,而Cat又继承了Animal。所以我们实例化的波斯猫类对象candy,能直接调用定义在父类Cat中的mew方法和父类的父类中的walk方法。

 

运行结果如下图:

 

python青少年编程第三季——09、继承父类的父类和多态的实现

这就是面向对象编程的最直观的好处,能大大提高了代码的重用能力。

 

说完继承,顺便来简单聊聊多态,在聊之前先上一段代码:

 

python青少年编程第三季——09、继承父类的父类和多态的实现

 

这段代码和前面代码的区别,仅仅在红色箭头所指的位置。这次,我们在新建的PersianCat类中,重写了mew和walk方法。

 

那么,这样做的目的是什么呢?

答案是——为了进化

 

在Animal中walk是通过走来实现的,但是到了波斯猫这一代,它已经学会了凌波微步了。

 

如果还是像以前一样只准它用爬的,这就太out,拖组织后退了,也不符合现实。

 

就好比,据说我们家以前数代都是地主,出门都是坐轿子的,但到了我爷爷这代已经做了孩子王,这时候再以坐轿子的方式出门就显然不合时宜和反动了。

 

那怎么办呢?

只能从新学习一种新的出门方式(或者叫改变出门方法)——步行,这也是一种与时俱进的进化。

 

Python中要实现某种方法的进化很简单,只需要在子类中重写该方法即可,注意方法名不用改。那么Python解释器在运行的时候就会自动调用子类中的方法,如上图中红色箭头所指的代码。

 

这就是所谓的多态。多态即可变,当然这种可变是相对于面向过程编程来讲的。

 

来看看进化之后的运行结果:

 

python青少年编程第三季——09、继承父类的父类和多态的实现

进化成功,恭喜美杜莎

对象调用的都是在子类中重写过的与父类们同名的方法。

 

下面来将两次的运行结果做个比较:

 

python青少年编程第三季——09、继承父类的父类和多态的实现

现在的凌波微步替代了Animal中的走路,子类中的吼叫,取代了父类中的喵喵叫。

总结:

方法的调用流程:Python解释器在调用一个对象的方法的时候,会首先从本类中寻找,如果本类中没有(如第一个例子中的walk和mew方法),就会自动到父类中寻找,如果父类中也没有,则继续到父类的父类中寻找。如果都找不到,那就原地打滚:报错。

 

但如果在子类中就有,则直接调用,并继续执行后面代码。自然也就不会再有去父类中寻找的过程,这就是python实现多态的机制。

 

本期有关继承和多态就为大家分享到这里,下期再会。

 

欢迎扫描下方二维码入群和我交流

 

 python青少年编程第三季——09、继承父类的父类和多态的实现

 

 

转自公众号:
高维数学

您必须 登录 才能发表评论!