python-多态
2017-12-30 16:38
148 查看
python本来就是多态的
python的变量是没有类型的,只有指向的对象是有类型的,所有方法的调用都是调用对象的方法,不存在不多态的情况
比如我们定义一个动物类,然后该类有两个子类,分别为狗类和猫类,另外再定义一个医院类,
我们看医院的类,医院类里面cure方法接收一个pet类型,里面调用了pet的show方法,,我们新键狗和猫的类,
分别调用他们的show方法,猫和狗类可以不用写属性,因为继承了动物类,然后新建一个医院类,把每个动物类作为参数传递进来,然后调用传递进来的pet类的方法,
多态的好处就在于我们无需知道它的子类型,放心的调用show方法,而具体调用show方法是作用在pet、dog、cat类里面,这是由传递进来的对象决定,因此,只要传递进来的是pet类或者是其子类就会调用实际的show类
调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保
对扩展开放:允许新增Animal子类;
对修改封闭:不需要修改依赖Animal类型的
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等函数。
相关文章推荐
- Python学习记录七---继承、多态和封装
- Python:实现多态
- Python基础-继承和多态
- Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)
- Python 学习笔记 - 面向对象(封装,继承和多态)
- python基础----多态与多态性、super函数用法、继承原理
- Python-面向对象(组合、封装与多态)
- 论python3下“多态”与“继承”中坑
- python中多态
- python的继承和多态
- python中的多态
- Python 多态
- Python学习篇 之 如何实现多态机制
- Python对象 继承 多态 获取对象信息 类的属性
- Python之类的继承和多态
- 8.python之面相对象part.6(python类中的多态与多态性)
- Python面向对象(一):继承,多态
- Python之面向对象编程:封装、继承、多态
- python入门(二十九):面向对象之多态
- Python学习(七)面向对象 ——继承和多态