课程首页 › 第8章 › 第50课

第50课 多态性

第8章 类与对象的奥秘· 知识点:类与对象 · 原书 8.6.3
插图
插图

多态性是类的重要特性,多态从字面来理解是多种形态的意思。

在Python中,多态也是通过继承来体现的。调用相同的父类方法,对象会因为从属于不同的子类,相同的方法会得出不同的结果。

插图

我们来举一个例子:动物都会说话,但是他们的语言是不同的。例如,狗狗是“汪汪汪”,老虎是“嗷呜”,人可以说中文。

我们来分析一下:

在Animal类中定义一个talk()函数,表示说话的方式。

定义以下4个子类。

·Dog子类:狗狗类,实现拓展talk()函数,说话的方式是“汪汪汪”。

·Tiger子类:老虎类,实现拓展talk()函数,说话的方式是“嗷呜”。

·Person子类:人类,实现拓展talk()函数,说话的方式是“中文”。

·Cat子类:猫咪类,没有实现拓展talk()函数。

创建子类的对象并调用talk()方法,看程序会有什么让人意外的输出。

插图

程序运行结果如下:

在说中文lily

小狗狗在叫,汪汪汪

老虎在叫,嗷呜

猫咪在叫

在程序中,创建了Animal类,父类Animal拥有4个子类,分别是Person类、Dog类、Tiger类、Cat类。

在Animal类中定义了talk()函数,在4个子类中,Person类、Dog类、Tiger类分别按照自己的方式对talk()函数进行拓展,但是Cat类没有对talk()函数进行拓展。

插图

在主程序中,我们创建了4个子类的对象,并且都调用了talk()方法。

因为Person类、Dog类、Tiger类都实现了自己的talk()方法,所以当对象调用talk()方法时,都按照各自的说话方式说话。Cat类没有实现自己的talk()方法,所以按照父类Animal中定义的talk()方法来实现。

插图
插图
插图

在主程序中,不同子类的对象调用了同样的talk()方法,程序却打印出了不同的结果,这就是多态。相同的函数,针对不同的子类实例,拥有不同的形态,不同的行为。

类与对象小结

(1)创建类的语法:

class类名:

属性和方法定义

(2)创建类的实例对象的语法:

对象名=类名()

(3)对象属性:

①通过对象名属性名具体属性设置对象的具体属性。

②通过对象名属性名来获取。

③通过__init__()方法来初始化属性。

(4)在类中,动作是通过函数来定义的。

(5)类的三个特性:

①封装性:类可以将数据和逻辑封装起来,使用的人并不关心具体的逻辑,调用类提供的方法完成相应的操作就可以了。

②继承性:通过继承我们可以使用原有类的所有功能,并且在原有类的基础上进行拓展。

③多态性:通过继承来体现。对象会因为从属于不同的子类,调用相同的父类方法,体现出不同的形态。

类与对象小挑战

(1)创建一个王者荣耀的英雄类,具有名字属性、皮肤属性、血量属性、技能属性。

(2)选一个你喜欢的英雄创建英雄类的对象。

(3)为英雄类创建释放技能方法。

(4)分别创建智力型英雄类、力量型英雄类、敏捷型英雄类作为英雄类的子类。

(5)针对不同的子类:智力型英雄类、力量型英雄类、敏捷型英雄类作为英雄类,拓展释放技能方法。

第9章 注释帮助我们理解

插图

程序员问:你写程序的时候最讨厌什么?A“”

程序员答:最讨厌写注释。B“”

程序员问:你看程序的时候最讨厌什么?A“”

程序员答:最讨厌别人的程序没有注释。B“”

写程序时,我们需要克服自己讨厌的,不做别人讨厌的。这样才是一名优秀的编程勇士。其实写注释也没那么讨厌,注释可以帮助我们理解代码,唤起程序思路的记忆,还能帮助他人快速看懂我们编写的代码。