项目九 继承与多态(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)

2024-08-02
| 30页
| 27人阅读
| 3人下载
普通

内容正文:

项目九 继承与多态 Contents 继承的概念和实现 继承的概念和实现 super方法的使用 isinstance、issubclass和type的使用 什么是继承 PART 01 继承和多态是面向对象程序设计的另外两个重要特性 通过继承,可以基于已有类创建新的类,新类除了继承已有类的所有属性和方法,还可以根据需要增加新的属性和方法。 通过多态,可以使得在执行同一条语句时,能够根据实际使用的对象类型决定调用哪个方法。 继承与多态 4 继承允许开发者基于已有的类创建新的类 如果一个类C1通过继承已有类C而创建,则将C1称作子类(sub class),将C称做基类、父类或超类(base class、super class)。 子类会继承父类中定义的所有属性和方法,另外也能够在父类中增加新的属性和方法。 如果一个子类只有一个父类,则将这种继承关系称为单继承 如果一个子类有两个或更多父类,则将这种继承关系称为多重继承。 什么是继承 5 类的继承关系示例 单继承:父类Person,子类Student和Teacher 多重继承:父类Student和Teacher,子类TA 子类继承父类的属性和方法 子类可以增加新的属性和方法,对方法重新定义 什么是继承 6 如何继承父类 PART 02 class 子类名(父类名1, 父类名2, …, 父类名M): 语句1 语句2 … 语句N 定义子类时需要指定父类,其语法格式为: 当M等于1时,则为单继承;当M大于1时,则为多重继承。 如何继承父类 代码缩进 4个空格 正文缩进1.27厘米 8 如何继承父类 【任务描述】 了解如何继承父类 【关键步骤】 了解如何继承父类 示例01 代码缩进 4个空格 正文缩进1.27厘米 9 1 class Person: #定义Person类 2 def SetName(self, name): #定义SetName方法 3 self.name=name #将self对应对象的name属性赋为形参name的值 4 class Student(Person): #以Person类作为父类定义子类Student 5 def SetSno(self, sno): #定义SetSno方法 6 self.sno=sno #将self对应对象的sno属性赋为形参sno的值 7 class Teacher(Person): #以Person类作为父类定义子类Teacher 8 def SetTno(self, tno): #定义SetTno方法 9 self.tno=tno #将self对应对象的tno属性赋为形参tno的值 10 class TA(Student,Teacher): #以Student类和Teacher类作为父类定义子类TA 11 def SetTeacher(self, teacher): #定义SetTeacher方法 12 self.teacher=teacher #将self对象的teacher属性赋为形参teacher的值 如何继承父类 代码缩进 4个空格 正文缩进1.27厘米 10 13 if __name__=='__main__': 14 stu=Student() #定义Student类对象stu 15 stu.SetSno('1810100') #调用Student类中定义的SetSno方法 16 stu.SetName('李晓明') #调用Student类从Person类继承过来的SetName方法 17 print('学号:%s,姓名:%s'%(stu.sno,stu.name)) #输出学号和姓名 18 t=Teacher() #定义Teacher类对象t 19 t.SetTno('998012') #调用Teacher类中定义的SetTno方法 20 t.SetName('马红') #调用Teacher类从Person类继承过来的SetName方法 21 print('教工号:%s,姓名:%s'%(t.tno,t.name)) #输出教工号和姓名 22 ta=TA() #定义TA类对象t 23 ta.SetSno('1600125') #调用Student类中定义的SetSno方法 24 ta.SetTno('T18005') #调用Teacher类中定义的SetTno方法 25 ta.SetName('张刚') #调用Person类中定义的SetName方法 26 ta.SetTeacher('马红') #调用TA类中定义的SetTeacher方法 25 print('学号:%s,教工号:%s,姓名:%s,主讲教师:%s'%(ta.sno,ta.tno,ta.name,ta.teacher)) 如何继承父类 示例01 代码缩进 4个空格 正文缩进1.27厘米 11 学号:1810100,姓名:李晓明 教工号:998012,姓名:马红 学号:1600125,教工号:T18005,姓名:张刚,主讲教师:马红 程序执行完毕后,将在屏幕上输出如下结果: 如何继承父类 示例01 代码缩进 4个空格 正文缩进1.27厘米 12 方法重写 PART 03 方法重写 【任务描述】 了解如何继承父类 【关键步骤】 了解如何继承父类 示例02 代码缩进 4个空格 正文缩进1.27厘米 14 1 class Person: #定义Person类 2 def __init__(self, name): #定义构造方法 3 self.name=name #将self对象的name属性赋为形参name的值 4 def PrintInfo(self): #定义PrintInfo方法 5 print('姓名:%s'%self.name) 6 class Student(Person): #以Person类作为父类定义子类Student 7 def __init__(self, sno, name): #定义构造方法 8 self.sno=sno #将self对象的sno属性赋为形参sno的值 9 self.name=name #将self对象的name属性赋为形参name的值 10 def PrintInfo(self): #定义PrintInfo方法 11 print('学号:%s,姓名:%s'%(self.sno,self.name)) 12 def PrintPersonInfo(person): #定义普通函数PrintPersonInfo 13 print('PrintPersonInfo函数中的输出结果', end='#') 14 person.PrintInfo() #通过person调用PrintInfo方法 方法重写是指子类可以对从父类中继承过来的方法进行重新定义,使得子类对象可以表现出与父类对象不同的行为。 方法重写 示例02 代码缩进 4个空格 正文缩进1.27厘米 15 15 if __name__=='__main__': 16 p=Person('李晓明') #创建Person类对象p 17 stu=Student('1810100','李晓明') #创建Student类对象stu 18 p.PrintInfo() 19 stu.PrintInfo() 20 PrintPersonInfo(p) 21 PrintPersonInfo(stu) 姓名:李晓明 学号:1810100,姓名:李晓明 PrintPersonInfo函数中的输出结果#姓名:李晓明 PrintPersonInfo函数中的输出结果#学号:1810100,姓名:李晓明 程序执行完毕后,将在屏幕上输出如下结果: 方法重写 示例02 代码缩进 4个空格 正文缩进1.27厘米 16 super方法 PART 04 super([类名[, 对象名或类名]]) super方法用于获取父类的代理对象,以执行已在子类中被重写的父类方法,其语法格式为: super方法有两个参数:第一个参数是要获取父类代理对象的类名。第二个参数如果传入对象名,则该对象所属的类必须是第一个参数指定的类或该类的子类,找到的父类对象的self会绑定到这个对象上;如果传入类名,则该类必须是第一个参数指定的类的子类。 在一个类A的定义中调用super方法时,可以将两个参数都省略,此时,super()等价于super(A, self),即获取A的父类代理对象,且获取到的父类代理对象中的self绑定到当前A类对象的self上。 super方法 代码缩进 4个空格 正文缩进1.27厘米 18 super方法 【任务描述】 了解super方法的用途 【关键步骤】 了解super方法的用途 示例03 代码缩进 4个空格 正文缩进1.27厘米 19 1 class Person: #定义Person类 2 def __init__(self, name): #定义构造方法 3 print('Person类构造方法被调用!') 4 self.name=name #将self对象的name属性赋为形参name的值 5 class Student(Person): #以Person类作为父类定义子类Student 6 def __init__(self, sno, name): #定义构造方法 7 print('Student类构造方法被调用!') 8 super().__init__(name) #调用父类的构造方法 9 self.sno=sno #将self对象的sno属性赋为形参sno的值 10 class Postgraduate(Student): #以Student类作为父类定义子类Postgraduate 11 def __init__(self, sno, name, tutor): #定义构造方法 12 print('Postgraduate类构造方法被调用!') 13 super().__init__(sno, name) #调用父类的构造方法 14 self.tutor=tutor #将self对象的tutor属性赋为形参tutor的值 15 if __name__=='__main__': 16 pg=Postgraduate('1810100','李晓明','马红') #创建Postgraduate类对象pg 17 print('学号:%s,姓名:%s,导师:%s'%(pg.sno,pg.name,pg.tutor)) super方法使用示例 super方法 示例03 代码缩进 4个空格 正文缩进1.27厘米 20 Postgraduate类构造方法被调用! Student类构造方法被调用! Person类构造方法被调用! 学号:1810100,姓名:李晓明,导师:马红 程序执行完毕后,将在屏幕上输出如下结果: super方法 示例03 代码缩进 4个空格 正文缩进1.27厘米 21 isinstance、issubclass和type PART 05 isinstance用于判断一个对象所属的类是否是指定类或指定类的子类; issubclass用于判断一个类是否是另一个类的子类; type用于获取一个对象所属的类。 内置函数isinstance、issubclass和type 23 isinstance、issubclass和type 【任务描述】 了解isinstance、issubclass和type方法的用途 【关键步骤】 了解isinstance、issubclass和type方法的用途 示例04 代码缩进 4个空格 正文缩进1.27厘米 24 1 class Person: #定义Person类 2 pass 3 class Student(Person): #以Person类作为父类定义子类Student 4 pass 5 class Flower: #定义Flower类 6 pass 7 if __name__=='__main__': 8 stu=Student() #创建Student类对象stu 9 f=Flower() #创建Flower对象f 10 print('stu是Person类或其子类对象:', isinstance(stu,Person)) 11 print('stu是Student类或其子类对象:', isinstance(stu,Student)) 12 print('f是Person类或其子类对象:', isinstance(f,Person)) 13 print('Student是Person类的子类:', issubclass(Student,Person)) 14 print('Flower是Person类的子类:', issubclass(Flower,Person)) 15 print('stu对象所属的类:', type(stu)) 16 print('f对象所属的类:', type(f)) 17 print('stu是Person类对象:', type(stu)==Person) 18 print('stu是Student类对象:', type(stu)==Student) isinstance、issubclass和type 示例04 代码缩进 4个空格 正文缩进1.27厘米 25 stu是Person类或其子类对象: True stu是Student类或其子类对象: True f是Person类或其子类对象: False Student是Person类的子类: True Flower是Person类的子类: False stu对象所属的类: <class '__main__.Student'> f对象所属的类: <class '__main__.Flower'> stu是Person类对象: False stu是Student类对象: True 程序执行完毕后,将在屏幕上输出如下结果: isinstance、issubclass和type 示例04 代码缩进 4个空格 正文缩进1.27厘米 26 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。继承最大的好处是子类获得了父类的全部功能。 调用父类及父类的父类的构造器 任务背景 任务01 调用父类及父类的父类的构造器 学习调用父类及父类的父类的构造器 任务需求 任务分析 建立Python项目 定义一个Animal类 定义两个Animal子类Horse和Donkey 定义另一个类Mule同时继承Horse和Donkey 任务01 借用Pycharm工具,建立Python3项目 定义一个Animal类 定义Animal类的子类Horse和Donkey 定义Mule类,同时继承Horse和Donkey 调用父类及父类的父类的构造器 任务步骤 任务结果 打印实例Mule,会依次打印他的父类Animal、Donkey、Horse 任务01 谢谢观看 $$

资源预览图

项目九   继承与多态(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
1
项目九   继承与多态(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
2
项目九   继承与多态(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
3
项目九   继承与多态(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
4
项目九   继承与多态(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
5
项目九   继承与多态(课件)-《程序设计基础(Python)》同步教学(电子工业出版社)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。