python继承、重写与多态

点击打开在线编译器,边学边练

        关于继承、重写和多态这三种类型,我们在日常使用过程中使用最多的是继承,当我们需要很多类似的子类的时候,如果我们一一定义会浪费我们很多的空间和时间,在这个时候我们只要定义一个父类,也就是定义一个模板,然后全部继承父类的属性和行为即可,工厂在批量生产某个机械配件的时候,并不是每生产一个都需要画一个图纸,而是根据一个图纸进行批量生产,我们在程序里使用继承的时候也是采用的这种思想,但是当我们想要对某个继承来的配件进行一定更改的时候,我们可以采用重写的方法,而多态则是综合了继承和重写,下面我们依次进行学习。

    1. 继承

        所谓继承,就是子继承父。

        根据例题我们来学习一下继承。

class Base:#定义一个名为Base的父类
    def __init__(self,name,age,id):
        self.name = name
        self.age = age
        self.id = id
        print('继承了Base这个类')
        print('我的名字:',self.name)
        print('我的年龄:',self.age)
        print('我的学号:',self.id)
    def goto_school(self):
        print(self.name,'正在使用Base类中的goto_school方法去上学')
class Student(Base):#继承父类的时候会继承父类中的所有方法
    pass
xiaoming = Student('小明',20,1001)
xiaoming.goto_school()

        输出结果为:

继承了Base这个类
我的名字: 小明
我的年龄: 20
我的学号: 1001
小明 正在使用Base类中的goto_school方法去上学

        我们来分析一下这个例子,首先我们在上面定义了一个名为Base的类,这个类为我们提供了一个构造方法,包含了姓名,名字和学号,然后还提供了一个goto_school()的方法,然后我们又在下面定义一个名为Student的类,这个类继承了上面的Base类,然后我们直接调用Student类,通过输出结果我们可以看出即使Student类中什么都没有,仍然可以执行出一系列操作,这些行为和属性都是由Base中继承而来的,然后最后一行我们还调用了Base中的方法,仍然是可以调用成功的。

    2. 重写

        重写是基于继承的一种方法,也就是说如果我们不想要从父类中继承来的属性或者行为,我们可以在子类中进行方法的重写。

        看下面的例子:

class Base:#定义一个父类
    def __init__(self,name):
        self.name = name
        print('继承了Base')
    def eat_dinner(self):
        print(self.name,'晚饭吃火锅')
class Student(Base):#继承父类的时候会继承父类中的所有方法
    def eat_dinner(self):
        print(self.name,'晚饭吃自助餐')
xiaoming = Student('小明')
xiaoming.eat_dinner()

        输出结果为:

继承了Base
小明 晚饭吃自助餐

        通过这个例子我们可以看出,虽然Student方法继承了Base中的方法并输出了‘继承了Base’,但是当xiaoming使用eat_dinner方法的时候,他使用的是子类重写过后的方法,而不是继承而来的方法。我们在重写的时候需要注意,重写的方法要保持名字和参数的一致性。

    3. 多态

        关于多态,多态就是上面两种方式的结合,通过多态我们可以写出各种各样的程序。

        看下图。

 6-4.png

        多态即一个方法在父类和子类中存在着不同种用法,可以分别调用。

        看下面的例子:

class Base:
    def __init__(self,name):
        self.name =name
        print('%s会读书'%self.name)
    def reading(self):
        print('%s在读语文书'%self.name)
class Inherit_One(Base):
    def reading(self):
        print('%s在读英语书'%self.name)
class Inherit_Two(Base):
    def reading(self):
        print('%s在看漫画书'%self.name)
a = Base('a')
a.reading()
b = Inherit_One('b')
b.reading()
c = Inherit_Two('c')
c.reading()

        输出结果为:

a会读书
a在读语文书
b会读书
b在读英语书
c会读书
c在看漫画书

       可以看出每个继承者都重写了reading方法,然后我们在调用这个方法的时候通过不同的类去调用,这种方式可以帮助我们在不同类中定义相同名字的不同方法,看似混乱,但是在我们现实中的各种管理系统当中往往都是离不开多态的使用。

    4. 总结

        通过这一节的学习,想必大家都认识到了继承和重写的方法,关于多态则需要大家在实际问题中去多多练习掌握,面向对象听起来比较抽象,但掌握起来并不太难。

 



本文固定URL:https://www.dotcpp.com/course/267

上一课:python类方法
第一章 人生苦短,我用Python
第二章 Python基础语法
第三章 Python入门语法
第四章 Python核心语法
第五章 函数
第六章 面向对象编程
第七章 模块
第八章 异常处理和程序调试
第九章 文件及目录操作
第十章 GUI编程
第十一章 进程和线程
第十二章 数据库管理
第十三章 算法
第十四章 爬虫
第十五章 实战篇
第十六章 后记
Dotcpp在线编译      (登录可减少运行等待时间)