全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

python 中的多态

发布时间:2023-11-08 04:34:01
发布人:xqq

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培训

相关文章

python中remove与del的区别是什么?

python中remove与del的区别是什么?

2023-11-08
Python中字符串如何查找?

Python中字符串如何查找?

2023-11-08
Python中如何进行字符串比较大小?

Python中如何进行字符串比较大小?

2023-11-08
python max函数中key是如何用的?

python max函数中key是如何用的?

2023-11-08

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取