python本来就是多态的
python的变量是没有类型的,只有指向的对象是有类型的,所有方法的调用都是调用对象的方法,不存在不多态的情况
比如我们定义一个动物类,然后该类有两个子类,分别为狗类和猫类,另外再定义一个医院类,
class pet: def __init__(self,name): self.name=name def show(self): print('动物在叫。。。') class yiyuan: def cure(self,pet): print('{}在治病'.format(pet.name)) pet.show() class dog(pet): def show(self): print('{}汪汪叫。。。'.format(self.name)) class cat(pet): def show(self): print('{}喵喵叫。。。'.format(self.name)) mydog=dog('二哈') mydog.show() mycat=cat('橘猫') mycat.show() yy=yiyuan() yy.cure(mydog) yy.cure(mycat)
》》》二哈汪汪叫。。。 》》》橘猫喵喵叫。。。 》》》二哈在治病 》》》二哈汪汪叫。。。 》》》橘猫在治病 》》》橘猫喵喵叫。。。
我们看医院的类,医院类里面cure方法接收一个pet类型,里面调用了pet的show方法,,我们新键狗和猫的类,
分别调用他们的show方法,猫和狗类可以不用写属性,因为继承了动物类,然后新建一个医院类,把每个动物类作为参数传递进来,然后调用传递进来的pet类的方法,
多态的好处就在于我们无需知道它的子类型,放心的调用show方法,而具体调用show方法是作用在pet、dog、cat类里面,这是由传递进来的对象决定,因此,只要传递进来的是pet类或者是其子类就会调用实际的show类
调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保show
方法编写正确,不用管原来的代码是如何调用的。这就是著名的“开闭”原则:
对扩展开放:允许新增Animal子类;
对修改封闭:不需要修改依赖Animal类型的show
等函数。