面向对象三大特性之多态
多态
多态更像是一种思想,而并非具体的技术。
因为继承的存在,从而引发了多态,Python本就是多态的形式,就像现实世界一样。都是起源于某一单细胞生物但是经过不断的演化差异化越来越大。
多态的定义即是:在不同的类中实例化得到的对象下的相同的方法,实现的过程不一样。这个就很有意思了...
多态的前提是必须有继承的支持,并且在实例化后所调用某一父类共同的方法中体现出了不同的结果或者具有了不同的实现过程。否则就体现不出多态的意义。
class Canine(object): """犬类""" def howl(self): """吼叫""" pass class Husky(Canine): """哈士奇""" def howl(self): print("蠢狗的叫声...") class Wolf(Canine): """狼""" def howl(self): print("嗷呜嗷呜...") h1 = Husky() h1.howl() w1 = Wolf() # 蠢狗的叫声... w1.howl() # 嗷呜嗷呜...
鸭子类型 duke type
我不管你到底是不是鸭子,你具备了鸭子的特性我就认为你是鸭子。
如:会嘎嘎嘎,走路摇摇晃晃,会游泳。
在Python中的具体体现如下:
我觉得所有容器类型都能被
for
循环调用,那我就用for
循环一下容器试试,事实上也确实如此。
注意:鸭子类型与继承毫无关系。它强调的也是一种很抽象的关系,看起来像什么就很大概率有那种东西的方法。
# 并没有定义犬类,但是依旧可以让使用者觉得很方便。 # 我认为哈士奇和狼都有叫的方法,那我就尝试调用它。尝试后发现果然我猜的没错! # 故鸭子类型与继承无关 Ps:这对使用者来说十分的便捷。 class Husky(Canine): """哈士奇""" def howl(self): print("蠢狗的叫声...") class Wolf(Canine): """狼""" def howl(self): print("嗷呜嗷呜...") h1 = Husky() h1.howl() w1 = Wolf() # 蠢狗的叫声... w1.howl() # 嗷呜嗷呜...