多态就是具有多种形态,即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法。
在运行过程中根据变量所引用的对象的类型,动态决定调用哪个对象中的方法。
如果子类中不存在指定名称的方法,回到父类中查找,如果父类中找到了,则调用父类中的方法。
多态的作用是什么呢?
我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。
而多态则是为了实现另一个目的——接口重用!
class Animal(object):
def __init__(self, name):
self.name = name
def talk(self):
print("Animal talk! ")
class Cat(Animal): # 继承 Animal
def talk(self):
print("%s: 喵喵喵!" % self.name)
class Dog(Animal): # 继承 Animal
def talk(self):
print("%s: 汪汪汪!" % self.name)
def func(parent): # 定义一个函数 func , 但不知道变量 parent 的类型。一个接口,多种形态
parent.talk()
c = Cat("毛毛")
d = Dog("憨憨")
func(c) # 毛毛: 喵喵喵!
func(d) # 憨憨: 汪汪汪!
编程其实就是一个将具体世界进行抽象化的过程,多态就是抽象化的一种体现,
把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话,
对不同类的对象发出相同的消息将会有不同的行为。