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入门