(高职)7.3 多态ppt课件.pptx
7.3 多态PYTHON 程序设计丁辉 商俊燕 范晓玲第七章 面向对象程序设计u7.1 面向对象程序设计基础面向对象程序设计基础u7.2 继承继承u7.3 多态多态u7.4 面向对象精选案例面向对象精选案例u小结小结2022年5月9日32022年5月9日4 多态多态(polymorphism)指的是一类事物有多种形态,一个抽象类有多个子类,因而多态多态的概念依赖于继承依赖于继承。如下,Animal动物类,又分为Dog狗类、Cat猫类、Tiger虎类。#定义基类(父类),其实基类本身也是继承了Python中的object类 class Animal(object): def _init_(self, name): self.name=name def saymyself (self): #定义基类的方法 print( In_Animal_class : I am a .format(self.name) class Cat(Animal): #定义子类 def saymyself (self): #同名的方法实现不同的功能 print( In_Cat_class : I am a .format(self.name) class Dog(Animal): #定义子类 def saymyself (self): #同名的方法实现不同的功能 print( In_Dog_class: I am a .format(self.name) class Tiger(Animal): #定义子类 def saymyself (self): #同名的方法实现不同的功能 print( In_Tiger_class: I am a .format(self.name)7.3 多态 2022年5月9日5 def testfunc(obj): #定义一个调用函数 print( say :.format(obj.name) #输出实例的name属性值 obj.saymyself() #调用实例的方法 animal1 = Animal(animal) #创建不同的对象 cat1 = Cat(cat) dog1 = Dog( dog ) tiger1 = Tiger(tiger) lst = animal1,cat1,dog1,tiger1 for i in lst: print(i.name) testfunc(i)animal #输出基类实例对象的属性animal say : In_Animal_class : I am a animal . #通过基类实例对象调用基类实例对象的方法cat #输出子类实例对象的属性cat say : In_Cat_class: I am a cat . #通过子类实例对象调用子类实例对象同名的方法,表现出多态dog #输出子类实例对象的属性dog say :In_Cat_class: I am a dog . 7.3 多态 2022年5月9日6tiger #输出子类实例对象的属性tiger say :In_Tiger_class: I am a tiger . isinstance(animal1,Animal)True isinstance(cat1,Animal)True isinstance(cat1,Cat)True isinstance(dog1,Animal)True isinstance(dog1,Dog)True isinstance(dog1,Cat)False7.3 多态 2022年5月9日7 多态体现在多个方面:(1)方法的多态性,上述所定义的Cat、Dog、Tiger类都继承了Animal类,但是每个子类都对父类的saymyself()进行了重新定义,从而体现了方法的多态性。(2)变量的多态性,通过isinstance()函数的测试可以看到,dog1既是Animal的实例,又是Dog的实例,以此可以看到变量的多态性。(3)参数的多态性,“def testfunc(obj):”所定义函数的参数obj,可以是任何的对象,因此在“ for i in lst: print(i.name) testfunc(i)” 语句中调用testfunc()时,分别传递了animal1、cat1、dog1和tiger1实例对象。从而体现了参数的多态性,其实我们在第5章函数部分,就已经在用了参数的多态性,当时我们定义了add(x,y)函数,可以对整数、实数、复数以及列表、元组和字符串求和,所求的和,是根据输入参数来确定的。7.3 多态 2022年5月9日8