您现在所在的位置:首页 >学习资源 > Python全栈+人工智能入门教材 > Python基础入门教程26:企业级开发基础7 面向对象特征(多态)

Python基础入门教程26:企业级开发基础7 面向对象特征(多态)

来源:奇酷教育 发表于:

面向对象程序设计最主要的有三个特征:封装、继承、多态本节内容主要讲解面向对象的第一个特征:多态1 多态的意义多态是让我们的程序在运

面向对象程序设计最主要的有三个特征:封装、继承、多态
 
本节内容主要讲解面向对象的第一个特征:多态
 
1 多态的意义
 
多态是让我们的程序在运行的过程中,在不同的状态下进行动态的切换,实现复杂的功能为目的的一种程序开发手段
 
在之前的章节中,实现了类型的继承关系之后,其实我们已经见过多态的一种操作了:方法重写实现的运行时多态,对象在执行具体的方法时,会直接执行父类中继承的对应的方法,如果该方法在子类中重写了,就会执行子类中重写过的方法,实现的是一种运行过程中的多态处理,代码如下:

2. 多态的扩展
 
我们定义一个这样的医疗系统,所有的男人、女人、小孩等等都可以去医院看病,然后康复的一个过程。


上面的代码中,我们已经可以看到,只要是从Person类型继承过来的类型所创建的对象,都可以在医院Hospital对象的care()中进行治疗。已经是一种多态。
 
同时如果功能需要扩展,需要多出来一个人物类型:小孩,小孩也会生病,也需要治疗~此时对于功能的扩展非常简洁,值需要添加如下代码就可以搞定:

2. 多态的完善
 
上面的代码中,我们其实是存在一定的缺陷的
上述代码设计的初衷是医院对象可以治病救人,也就是Hosiptal对象的care()函数可以治疗Person派生出来的对象。
但是从代码逻辑中,我们可以看到只要传递给care()函数的参数对象中包含health()函数就可以进行处理,而并非必须是Person对象。
 
此时需要在函数中进行判断处理,如果是Person对象就进行care()治疗的处理,如果不是Person对象,就提示不做治疗操作。
 
对象和类型的判断可以通过isinstance(obj, Type)进行类型的判断,如:

上述代码中,我们可以观察到通过isinstance()函数进行变量所属数据类型的判断了,同时在继承关系中,有一个情理之中的判断结果:man是Man类型的,同时也是Person类型的,因为Man类型是从Person类型继承过来的。
 
所以可以对之前的Hospital的care()函数进行如下改造:


>>>更多VR/AR入门教程:VR入门