首页 / 知识
python 中的多态
2023-11-12 13:30:00
python中的鸭子类型允许我们使用任何提供所需方法的对象,而不需要迫使它成为一个子类。
由于python属于动态语言,当你定义了一个基类和基类中的方法,并编写几个继承该基类的子类时,由于python在定义变量时不指定变量的类型,而是由解释器根据变量内容推断变量类型的(也就是说变量的类型取决于所关联的对象),这就使得python的多态不像是c++或java中那样,定义一个基类类型变量而隐藏了具体子类的细节。
请看下面的例子和说明:
1classAudioFile:
2def__init__(self,filename):
3ifnotfilename.endswith(self.ext):
4raiseException("Invalidfileformat")
5self.filename=filename
6
7classMP3File(AudioFile):
8ext="mp3"
9defplay(self):
10print("Playing{}asmp3".format(self.filename))
11
12classWavFile(AudioFile):
13ext="wav"
14defplay(self):
15print("Playing{}aswav".format(self.filename))
16
17classOggFile(AudioFile):
18ext="ogg"
19defplay(self):
20print("Playing{}asogg".format(self.filename))
21
22classFlacFile:
23"""
24ThoughFlacFileclassdoesn'tinheritAudioFileclass,
25italsohasthesameinterfaceasthreesubclassofAudioFile.
26
27Itiscalledducktyping.
28"""
29def__init__(self,filename):
30ifnotfilename.endswith(".flac"):
31raiseException("Invalidfileformat")
32self.filename=filename
33
34defplay(self):
35print("Playing{}asflac".format(self.filename))
上面的代码中,MP3File、WavFile、OggFile三个类型继承了AudioFile这一基类,而FlacFile没有扩展AudioFile,但是可以在python中使用完全相同的接口与之交互。
因为任何提供正确接口的对象都可以在python中交替使用,它减少了多态的一般超类的需求。继承仍然可以用来共享代码,但是如果所有被共享的都是公共接口,鸭子类型就是所有所需的。这减少了继承的需要,同时也减少了多重继承的需要;通常,当多重继承似乎是一个有效方案的时候,我们只需要使用鸭子类型去模拟多个超类之一(定义和那个超类一样的接口和实现)就可以了。
以上内容为大家介绍了python中的多态,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们
最新内容
相关内容
为何你的Python代码应是扁平与稀疏
为何你的Python代码应是扁平与稀疏的,代码,培训,信息,观察,设计,工具,嵌套,闻闻,程序员,沉思,Python之禅之所以得名,正是由于它那简明扼要的规Python算法定义
Python算法定义,有限,时间,数据,算法,情况,培训,系统,策略,复杂度,步骤,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python怎样获取json数据类型?
python怎样获取json数据类型?,培训,数据类型,类型,正则,火狐,以上,方法,更多,内容,列表,python中获取json不同数据类型的方法:1、获取"key":vpython如何获取列表里的数据类型?
python如何获取列表里的数据类型?,代码,信息,培训,类型,数据类型,表里,元素,语句,函数,对象,1、Python可以通过tpye()方法来判断list里的元知如何在python代码中指定保存的文件
如何在python代码中指定保存的文件格式,代码,培训,文件格式,格式,二进制文件,文件,后缀,以上,方法,更多,python指定保存文件格式的方法:1、保python如何看变量属性
python如何看变量属性,培训,属性,函数,变量,参数,对象,方法,列表,范围内,字典,1、使用dir()函数查看dir()函数不带参数时,返回当前范围内的变实数是不是python的数据类型?
实数是不是python的数据类型?,数字,标准,培训,实数,数据类型,数轴,复数,有限小数,无理数,虚数,实数是python的数据类型。实数,是有理数和无理python如何查看所有变量
python如何查看所有变量,名称,培训,模块,变量,成员,函数,全部,所指,字符串,结尾,python中可以使用dir()函数查看所有变量。通过dir()函数,我们python如何查找是否存在某个变量?
python如何查找是否存在某个变量?,培训,变量,函数,定义,属性,参数,字典,对象,类型,方法,python中可以使用locals()、dir()、vars()等函数来查python列表有哪些常用方法?
python列表有哪些常用方法?,位置,方法,培训,列表,语法,元素,示例,对象,以上,参数,列表是最常用的Python数据类型,它可以作为一个方括号内的逗python如何查找是否存在某个变量?
python如何查找是否存在某个变量?,培训,变量,函数,定义,属性,参数,字典,对象,类型,方法,python中可以使用locals()、dir()、vars()等函数来查