因之前写的多态 的例子,似乎有点问题,现在重写改造了一下。

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()方法,但每不同格式的音频文件所实现的功能是不同的