9.8继承(课件)-《程序设计基础(Python)》同步教学(人民邮电版)

2024-08-19
| 21页
| 227人阅读
| 17人下载
普通

内容正文:

第9章 面向对象编程 1 学习目标/Target 了解面向对象,能够区分面向过程和基于面向对象的编程思想 了解面向对象的特性,能够说出什么是封装、继承、多态 熟悉对象和类的关系,能够归纳出对象和类的关系 掌握类的定义和对象的创建方式,能够通过关键字class定义类并创建对象 掌握属性,能够在程序中正确访问和修改类属性、实例属性和私有属性 2 学习目标/Target 掌握方法,能够在程序中正确调用实例方法、类方法、静态方法和私有方法 掌握构造方法的使用方式,能够在构造方法中初始化实例属性 掌握封装的特性,能够在程序中实现类的封装 掌握单继承、多继承的语法,能够在类中实现单继承和多继承 掌握重写的方式,能够在子类中实现父类方法的重写 3 学习目标/Target 掌握super()函数的使用方式,能够通过super()函数调用父类中被重写 的方法 掌握多态的特性,能够在程序中以多态的形式调用类中定义的方法 了解异常,能够说出异常的类型以及常见的异常类 掌握捕获与处理异常的方式,能够选择合适的方式捕获与处理异常 掌握抛出异常方式,能够通过raise和assert语句抛出异常 4 章节概述/ Summary 面向对象是程序开发领域的重要思想,它以模拟人类认识客观世界的方式来看待程序中的事务,将这些事务皆视为对象。Python是一种支持面向对象编程的语言,Python3.x版本的源码是完全基于面向对象的思想设计的。因此,了解面向对象的思想对于学习Python编程非常重要。本章将针对面向对象编程的相关知识进行详细地讲解。 5 目录/Contents 01 面向对象概述 类与对象 属性 02 03 方法 04 构造方法 05 6 目录/Contents 06 实例:航天器信息查询工具 封装 继承 07 08 多态 09 异常 10 7 继承 9.8 8 9.8.1 单继承 继承主要用于描述类与类之间的关系。通过继承,一个类可以从另一个类中继承其属性和方法,并且在不改变原有类的基础上扩展功能。若类与类之间具有继承关系,被继承的类称为父类或基类,继承其他类的类称为子类或派生类,子类会自动拥有父类的公有成员。 9.8.1 单继承 单继承即子类只继承一个父类。现实生活中,波斯猫、折耳猫、短毛猫都属于猫类,它们之间存在的继承关系即为单继承,如下图所示。 9.8.1 单继承 Python中单继承的语法格式如下所示: class 子类名(父类名): 子类继承父类的同时会自动拥有父类的公有成员。若在定义类时不指明该类的父类,那么该类默认继承基类object。 9.8.1 单继承 下面定义一个表示猫的类Cat,一个继承Cat类、表示折耳猫的类ScottishFold,代码如下。 class Cat(object): def __init__(self, color): self.color = color def cry(self): print("喵喵叫~") class ScottishFold(Cat): # 定义继承Cat的子类ScottishFold pass fold = ScottishFold("灰色") # 创建子类的对象 print(f"{fold.color}的折耳猫") # 子类访问从父类继承的属性 fold.cry() # 子类调用从父类继承的方法 9.8.1 单继承 需要注意的是,子类不会拥有父类的私有成员,也不能访问父类的私有成员。 9.8.1 单继承 例如,在上述示例的Cat类中增加一个私有属性__age和一个私有方法__test(),修改后的Cat类代码如下: class Cat(object): def __init__(self, color): self.color = color self.__age = 1 def cry(self): print("喵喵叫~") def __test(self): print("我是私有方法") 在示例的最后一行增加访问私有属性和调用私有方法的代码,代码如下: print(fold.__age) fold.__test() 运行代码,会报错,从错误信息可知,子类继承父类后不会拥有父类的私有成员。 9.8.2 多继承 现实生活中很多事物是多个事物的组合,它们同时具有多个事物的特征或行为,比如沙发床是沙发与床的组合,既可以折叠成沙发的形状,也可以展开成床的形状;房车是房屋和汽车的组合,既具有房屋的居住功能,也具有汽车的行驶功能。 9.8.2 多继承 程序中的一个类也可以继承多个类,如此子类具有多个父类,也自动拥有所有父类的公有成员。Python中多继承的语法格式如下所示。 class 子类名(父类名1, 父类名2, ...): 9.8.2 多继承 例如,定义一个表示房屋的类House,一个表示汽车的Car类,以及一个继承House和Car的子类TouringCar,代码如下: class House(object): def live(self): print("供人居住") class Car(object): def drive(self): print("行驶") class TouringCar(House, Car): pass tour_car = TouringCar() tour_car.live() # 子类对象调用父类House的方法 tour_car.drive() # 子类对象调用父类Car的方法 9.8.2 多继承 试想一下,如果House类和Car类中有一个同名的方法,那么子类会调用哪个父类的同名方法呢?如果子类继承的多个父类是平行关系的类,那么子类先继承哪个类,便会先调用哪个类的方法。 9.8.3 重写父类方法 程序中,子类会原封不动地继承父类的方法,但子类有时需要按照自己的需求对继承的方法进行调整,也就是在子类中重写从父类继承的方法。Python中实现方法重写的方式非常简单,只要在子类中定义与父类方法同名的方法,在方法中按照子类需求重新编写功能代码即可。 9.8.3 重写父类方法 例如,定义表示人的类Person,表示中国人的类Chinese,使Chinese类继承Person类,并重写从父类继承的方法say_hello(),代码如下: class Person: def say_hello(self): print("打招呼!") class Chinese(Person): def say_hello(self): print("吃了吗?") chinese = Chinese() chinese.say_hello() # 子类调用重写的方法 调用Chinese类中重写的方法say_hello()。 9.8.4 super()函数 Python提供了一个super()函数,该函数可以调用父类中被重写的方法。 例如,使用super()函数在Chinese类中调用Person类中的say_hello()方法,代码如下: class Person: def say_hello(self): print("打招呼!") class Chinese(Person): def say_hello(self): print("吃了吗?") print("-" * 10) super().say_hello() 使用chinese对象调用say_hello()方法。 chinese = Chinese() chinese.say_hello() 运行程序,结果如下所示 吃了吗? ---------- 打招呼! $$

资源预览图

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