因之前写的多态 的例子,似乎有点问题,现在重写改造了一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
"""
多态的特性是调用不同的子类将会产生不同的行为,而无需明确知道这个子类实际上是什么
"""
class
AudioFile:
def
__init__(
self
, filename):
if
not
filename.endswith(
self
.ext):
#检测来自子类的ext变量是否以按指定的格式结尾,如果不是则引发异常(初始化音频文件需按指定的格式)
raise
Exception(
"Invalid file format"
)
self
.filename
=
filename
class
MP3File(AudioFile):
ext
=
"mp3"
def
play(
self
):
#mp3音频具体的处理细节
print
(
"play %s music..."
%
self
.filename)
class
WavFile(AudioFile):
ext
=
"wav"
def
play(
self
):
#wav音频具体的处理细节
print
(
"play %s music..."
%
self
.filename)
class
OggFile(AudioFile):
ext
=
"ogg"
def
play(
self
):
#ogg音频具体的处理细节
print
(
"play %s music..."
%
self
.filename)
class
Player:
#这是一个播放器,用于播放不同格式的音频
def
start(
self
, audio):
print
(
"Initialize {0} format audio files"
.
format
(audio.ext))
print
(
"Audio file: {0} playing"
.
format
(audio.filename))
audio.play()
if
__name__
=
=
'__main__'
:
#创建一个播放器
player
=
Player()
#创建3个不同格式的音频文件
ogg
=
OggFile(
"hello.ogg"
)
mp3
=
MP3File(
"free abc.mp3"
)
wav
=
WavFile(
"love.wav"
)
#播放器播放音乐
player.start(ogg)
#看起来好像都是调用了同一个play()方法,但每不同格式的音频文件所实现的功能是不同的
|
本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/2063588