写点什么

实践解读丨 Python 面向对象三大特征之多态

发布于: 2020 年 09 月 21 日

摘要:多态从字面意思上看就是多种形态,在我们 python 的面向对象里就是不同的对象在接收相同方法或者函数时会产生不同的行为,也就是说,每个对象可以用自己的方式去响应共同的函数,不同的方式实现不同的结果。


多态从字面意思上看就是多种形态,比如人有黑种人,黄种人,白种人等等,这就是一类事物的不同形态,在我们 python 的面向对象里就是不同的对象在接收相同方法或者函数时会产生不同的行为,也就是说,每个对象可以用自己的方式去响应共同的函数,不同的方式实现不同的结果。


多态


1、多态


多态指的是一类事物有多种形态


动物有多种形态:人,狗,猪


import abcclass Animal(metaclass=abc.ABCMeta): #同一类事物:动物    @abc.abstractmethod    def talk(self):        pass
class People(Animal): #动物的形态之一:人 def talk(self): print('say hello')
class Dog(Animal): #动物的形态之二:狗 def talk(self): print('say wangwang')
class Pig(Animal): #动物的形态之三:猪 def talk(self): print('say aoao')
复制代码


文件有多种形态:文本文件,可执行文件


import abcclass File(metaclass=abc.ABCMeta): #同一类事物:文件    @abc.abstractmethod    def click(self):        pass
class Text(File): #文件的形态之一:文本文件 def click(self): print('open file')
class ExeFile(File): #文件的形态之二:可执行文件 def click(self): print('execute file')
复制代码


2、多态性


一 什么是多态动态绑定(在继承的背景下使用时,有时也称为多态性)


多态性是指在不考虑实例类型的情况下使用实例


在面向对象方法中一般是这样表述多态性:


向不同的对象发送同一条消息(!!!obj.func():是调用了 obj 的方法 func,又称为向 obj 发送了一条消息 func),不同的对象在接收时会产生不同的行为(即方法)。


也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。


比如:老师.下课铃响了(),学生.下课铃响了(),老师执行的是下班操作,学生执行的是放学操作,虽然二者消息一样,但是执行的效果不同
复制代码


peo=People()dog=Dog()pig=Pig()
#peo、dog、pig都是动物,只要是动物肯定有talk方法#于是我们可以不用考虑它们三者的具体是什么类型,而直接使用peo.talk()dog.talk()pig.talk()#更进一步,我们可以定义一个统一的接口来使用def func(obj): obj.talk()
复制代码


鸭子类型


逗比时刻:


Python 崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’


python 程序员通常根据这种行为来编写程序。例如,如果想编写现有对象的自定义版本,可以继承该对象


也可以创建一个外观和行为像,但与它无任何关系的全新对象,后者通常用于保存程序组件的松耦合度。


例 1:利用标准库中定义的各种‘与文件类似’的对象,尽管这些对象的工作方式像文件,但他们没有继承内置文件对象的方法


例 2:序列类型有多种形态:字符串,列表,元组,但他们直接没有直接的继承关系


#二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用class TxtFile:    def read(self):        pass
def write(self): pass
class DiskFile: def read(self): pass def write(self): pass
复制代码


点击关注,第一时间了解华为云新鲜技术~


发布于: 2020 年 09 月 21 日阅读数: 54
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
实践解读丨Python 面向对象三大特征之多态