当前位置:首页  >  技术干货  >  Python技术干货  > python 中的多态

python 中的多态

来源:千锋教育
发布时间:2023-11-08 07:54:02
分享

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相关知识,请关注IT培训机构:千锋教育。

声明:本站部分稿件版权来源于网络,如有侵犯版权,请及时联系我们。

相关推荐

  • python代码检测工具及区别 pep8/pycodestyle相信大家多多少少都见过PEP8,那PEP8到底是个啥?其实PEP8是一种Python代码规范指南,其目的是为了保持代码的一致性、可读性。检查自己代码是否符合PEP8规范
  • Python基础之numpy中的常见函数有哪些 有些Python小白对numpy中的常见函数不太了解,今天小编就整理出来分享给大家。Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。
  • python获取当前时间日期有哪些方法? 获取到时间也是我们在学习python遇到的常见问题,根据不同的需求,获取的方式也有所不同,下面针对获取的几个场景,给大家整理出来几个方式。一、时间日期基本介绍时间日期类型在Python中主要有两个模块
  • python yield的用法 通常大家遇到不会内容,第一想法肯定是进行搜索查找了,然而所有标题叫简单易懂并非真的如此,我在查询pythonyield就是,既然无简单易懂内容,小编就帮大家集合整理出来。结合网上教学内容,指向yiel
  • 详析python多行代码注释快捷键的用法 我们在敲击代码时,遇到不需要使用的语句,大家是否一行一行的删除?这样工作量可谓庞大,今天给大家带来关于注释的快捷键使用,一起来看看吧~关于python编程注释快捷键1、注释单行(1)方法1:直接在单行
  • python字符串大小写转换 如果想要得心应手的去使用python语言,那么对于python的字符串大小一定要认真了解,下面给大家整理关于python字符串大小用法和示例,便于大家理解!1、capitalize()描述:将字符串的