因之前寫的多態 的例子,似乎有點問題,現在重寫改造了一下。
""" 多態的特性是調用不同的子類將會產生不同的行爲,而無需明確知道這個子類實際上是什麼 """ 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()方法,但每不同格式的音頻文件所實現的功能是不同的