python|面向对象-2|探讨继承和多态

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: python|面向对象-2|探讨继承和多态

上一篇文章,我们介绍了什么是面向对象、以及面向对象和面向过程的区别,最后我们写了案例来简单的介绍一下类class,包括 如何创建一个类,类的构造函数__init__()和析构函数__del__()的意义,以及将类变量设置为私有变量。如果你还没有看过该文章,建议你先看下,以便做到承上启下。

本篇文章,将通过实例的方式,简单介绍一下继承和多态。



继承


在面向对象中,继承是最常见的代码复用技术,它允许我们从一个类派生出一个新的类,并且新的类继承父类的属性和方法,我们将其称之为继承。


python中,我们还是使用class来定义一个类,并且要通过其指定父类,来完成继承,例如:

我们一个类名为a:

class a:
  pass



我想写一个新类b,来继承a,我们可以这样写:

class b(a):
    pass

这样的话,b类就继承了a类所有的属性和方法。


我们来试试,我们定义一个汽车类car,并且写一个子类,继承car

image.png


上述代码,我们先定义了一个car类,其中需要给该类传入一个name,且该类有2个方法,分别为startCarstopCar。我们分别在2个方法中打印一下信息。


接着,我们再定义了一个类smallCar,该类继承car,且在该子类中,也定义了一个方法,setColor,该方法中也输出了一个语句。


最后在main函数中,我们实例化一个smallCar,命名为c,我们调用继承过来的startCarstopCar以及自身的setColor方法。

实际执行效果如下:

image.png


我们发现,smallCar继承了父类所有的方法和属性。我们在samllCar中并没有定义构造函数来获取name传参,但是我们继承了car类,也继承了其构造函数。


这里也要注意一点,并不是所有的属性和方法都可以继承过来的,就比如我们上一篇讲的类的私有属性,我们修改下代码:

image.png


我们在父类中,我们定义了类私有属性__name,此时若我们执行startCarstopCar是没问题的,因为这2个方法是属于car类的,但是smallCar却不能执行该方法,因为它没办法获取,我们若执行,则会报错,如下:

image.png

可见,类私有属性,并不能被继承过来。



多重继承


多重继承比较简单哈,这里就距离说明一下即可,在python中除了单继承,python类还支持继承多个父类,下面举个例子:

image.png


上述代码,我们先定义了网络设备类networkDevice,它有一个networking方法,而后定义了computer类,它有一个device方法。最后再定义nodebook类,该类继承networkDevicecomputer类,所以nodebook类有networking方法和device方法,我们运行试下:

image.png


那假如,我们定义的2个父类,都有相同的方法呢? 比如:

image.png


我们在networkDevice类中,也定义了device方法,那么子类,应该继承哪个父类呢? 在python中,并不是通过调用的父类的先后顺序决定的,而是通过一种MRO的算法类确定的,这里就暂时不讲MRO了,反正该代码不会报错。



多态


用一句话来概述多态就是 通过不同的对象,调用同一个方法,会有不同的响应,这就是多态。

python中,我们使用继承 + 方法重写来完成多态,比如我们写一个案例:

image.png

上述代码,我们先定义了一个基类ObjectStorageServers,该类构造方法需要接收一个key,且还定义了2个方法,loginupdate。随后我们分别定义了OSSCOS类,此2类都继承ObjectStorageServers类,并且重写了loginupdate方法。最后分别来定义oss对象 和 cos对象,来调用login方法和update方法。


代码执行后结果为:

image.png


可以看到,oss对象和cos对象都调用了login方法和update方法,但是此2者都表现出不一样的行为,这就是多态。



总结


本篇文章,我们仅介绍了2个点,一个是继承,一个是多态。继承是面向对象的特性之一,目的是实现代码复用,继承的类,我们称之为子类,被继承的类,我们称之为父类,子类会继承父类所有的属性和方法,但是有个特殊的,就是不会继承父类的私有属性。


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
2月前
|
Java 程序员 C++
Python 面向对象详解!
本文详细介绍了Python中的面向对象编程(OOP),包括类、对象、继承、封装、多态和抽象等核心概念。通过具体示例,解释了如何使用类定义对象的属性和方法,以及如何通过继承实现代码重用。文章还探讨了封装和多态的重要性,并介绍了私有属性和抽象类的使用方法。最后,总结了OOP的四大支柱:封装、抽象、继承和多态,强调了这些概念在Python编程中的应用。适合Java程序员扩展Python编程知识。
77 2
|
4月前
|
Python
你真的会面向对象吗!解密Python“魔术方法”
你真的会面向对象吗!解密Python“魔术方法”
42 0
|
2月前
|
Python
Python面向对象(2)
【10月更文挑战第14天】
Python面向对象(2)
|
2月前
|
设计模式 程序员 C语言
Python面向对象
【10月更文挑战第13天】
Python面向对象
|
3月前
|
前端开发 Python
Python编程的面向对象有哪些(二)
Python编程的面向对象(二)—类的多态
26 7
|
3月前
|
IDE Java 开发工具
Python类与面向对象
Python类与面向对象
|
2月前
|
Python
Python编程-关于面向对象的一些
Python编程-关于面向对象的一些
18 0
|
4月前
|
算法 Python
python多继承的3C算法是什么?怎么用?
有很多地方都说python多继承的继承顺序,是按照深度遍历的方式,其实python多继承顺序的算法,不是严格意义上的深度遍历,而是基于深度遍历基础上优化出一种叫3C算法
|
4月前
|
安全 算法 Go
Python面向对象的三大特性
python面向对象编程(OOP)的三大特性是封装、继承和多态。这些特性共同构成了OOP的基础,使得软件设计更加灵活、可维护和可扩展。
36 3
|
5月前
|
数据采集 Java C语言
Python面向对象的高级动态可解释型脚本语言简介
Python是一种面向对象的高级动态可解释型脚本语言。
40 3