Python 知识要点:多态
多态(英语:Polymorphism),是指物件导向程式执行时,相同的讯息可能会送給多个不同的类別之物件,而 系统可依剧物件所属类別,引发对应类別的方法,而有不同的行为。简单来说,所谓多型意指相同的讯息給予不 同的物件会引发不同的动作称之。(维基百科)
多态,不同的子类对象调用相同的父类方法,产生不同的执行结果。
例如:1 + 2 >> 3; "Wor" + "ld" >> "World"; + 可以根据不同的参数类型执行不同的操作,得到不同的结果。
关于多态,有一个被称作“鸭子类型”(duck typing)的东西,其含义在维基百科中被表述为:
在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语 义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。这个概念的名字来源于由 James Whitcomb Riley 提出的鸭子测试:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。
class Dog(object): def __init__(self, name): self.name = name def game(self): print("%s 去接飞盘" % self.name) class XiaoTianDog(Dog): def game(self): print("%s 飞天" % self.name) class Person(object): def __init__(self, name): self.name = name def game_with_dog(self, dog): print("%s 和 %s 快乐的玩耍" % (self.name, dog.name)) # 让狗玩耍 dog.game() # 1.创建一个狗对象 # 不同的子类对象调用相同的父类方法game da_wang = Dog("大旺") wang_cai = XiaoTianDog("飞天旺财") # 2.创建一个小明对象 xiao_ming = Person("小明") # 3.让小明调用和狗玩的方法 xiao_ming.game_with_dog(da_wang) xiao_ming.game_with_dog(wang_cai)
class Animal: def __init__(self, name=""): self.name = name def talk(self): print("$%^$^$") class Cat(Animal): def talk(self): print("MiMiMi") class Dog(Animal): def talk(self): print("WoWoWo") animal = Animal() animal.talk() jack = Cat("Jack") jack.talk() tom = Dog("Tom") tom.talk()
从现在开始,种下梦想中的参天大树