1. 首先阐明一下多态的概念:多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
2. 阐明一下鸭子类型的概念:一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。
这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
然后作为动态语言,Python一样也是鸭子类型,所以Python的实现多态的方式,将和其他高级语言有很大的差别,Python本身弱类型,所以在Pyhon中实现多态似乎没有太大的意义。
class AudioPlayer(object): def __init__(self, file_name): super(AudioPlayer, self).__init__() if not file_name.endswith(self.ext): raise Exception("Invalid file format") self.file_name = file_name class MP3Player(AudioPlayer): ext = "mp3" def play(self): print("playing {} as mp3".format(self.file_name)) class WAVPlayer(AudioPlayer): ext = "wav" def play(self): print("playing {} as wav".format(self.file_name)) mp3_player = MP3Player("xx.mp3") wav_player = WAVPlayer("yy.wav") mp3_player.play() wav_player.play()