### 第9章.pptx —— Python基础学习PPT #### 学习目标 - 理解面向对象的基本概念。 - 掌握面向对象的三大特性:封装、继承和多态。 - 了解如何自定义异常类。 #### 9.1 面向对象概述 ##### 9.1.1 面向对象的基本概念 面向对象编程(Object-Oriented Programming, OOP)是一种软件开发范式,它基于“对象”这一概念来构建程序。对象通常包含两部分:数据(即属性)和作用于这些数据的行为(即方法)。OOP 的核心优势在于它的三个主要特性:封装、继承和多态。 **面向过程 vs 面向对象** - **面向过程**:这是一种传统的编程方式,强调按照顺序执行一系列任务。例如,在处理文件时,先打开文件,然后读取文件内容,最后关闭文件。这种方式适用于简单的问题,但对于复杂问题则显得力不从心。 - **面向对象**:与之相比,面向对象编程则更加强调“对象”这一概念。每个对象都有自己的状态和行为,并且对象之间可以通过消息传递相互协作。这种方式更加灵活,易于维护和扩展。 ##### 9.1.2 面向对象的三大特性 **封装** 封装是面向对象程序设计的核心思想之一,其目的是隐藏对象的具体实现细节,只暴露必要的接口。通过封装,我们可以保护对象的内部状态不被外部随意修改,同时也能提供一组定义良好的接口供外部使用。Python 中,我们通常通过在变量名前加两个下划线`__`来实现一定程度的封装,这被称为“名称篡改”。 **继承** 继承允许我们创建一个新的类(子类),该类继承了现有类(父类或基类)的所有属性和方法。子类不仅可以继承父类的属性和方法,还可以定义自己的新属性和方法。这种方式极大地提高了代码的复用性和模块化程度。 **多态** 多态是指同一个接口在不同类中表现出不同的行为。这意味着一个方法名可以有多种实现方式,取决于它的调用者是谁。多态使得程序更加灵活,可以更容易地扩展和修改。 #### 9.2 封装 ##### 9.2.1 封装的概念 在Python中,可以通过在变量或方法前添加双下划线`__`来实现一定程度的封装,这表示该变量或方法是私有的,不应被类的外部代码直接访问。然而,Python的私有属性并非完全私有,它们可以通过特定的方式访问,例如通过`_类名__属性名`的形式。这种方式虽然可行,但不推荐使用,因为它破坏了封装的原则。 ##### 9.2.2 `@property`的使用 Python 提供了一个强大的装饰器`@property`,它允许我们更优雅地控制类的属性访问。使用`@property`装饰器后,可以将一个方法当作属性来使用,而无需调用括号。此外,还可以通过定义`@属性名.setter`和`@属性名.deleter`来控制该属性的赋值和删除操作。 **示例代码**: ```python class Score: def __init__(self, data): self.__data = data # 定义私有属性__data @property # 使用@property将属性变为只读的 def data(self): return f"私有属性的值为{self.__data}" s1 = Score(60) print(s1.data) # 访问属性 ``` 上述代码中,`data`属性通过`@property`装饰器设置为只读。如果想要修改`data`的值,可以定义一个`@data.setter`方法。 #### 9.3 继承 继承允许子类继承父类的属性和方法。Python 支持单继承和多继承。子类可以通过`super()`函数调用父类的方法,以便实现代码的复用。 **示例代码**: ```python class Person: def __init__(self, name): self.name = name def say_hello(self): print(f"Hello, my name is {self.name}.") class Student(Person): def __init__(self, name, school): super().__init__(name) self.school = school def say_hello(self): super().say_hello() print(f"I study at {self.school}.") # 创建一个Student实例 s1 = Student("Alice", "Python University") s1.say_hello() ``` #### 9.4 多态 多态是指同一个接口在不同的类中表现出不同的行为。Python 中实现多态非常简单,因为它是动态类型语言。我们可以定义一个通用的接口,然后由具体的子类来实现。 **示例代码**: ```python class Animal: def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" def animal_sound(animal): return animal.speak() # 创建实例 dog = Dog() cat = Cat() print(animal_sound(dog)) # 输出: Woof! print(animal_sound(cat)) # 输出: Meow! ``` #### 实战案例:模拟薪资结算 面向对象的设计可以帮助我们更好地组织和管理代码。例如,我们可以定义一个`Employee`类来表示员工,并实现薪资计算逻辑。 **示例代码**: ```python class Employee: def __init__(self, name, hourly_rate): self.name = name self.hourly_rate = hourly_rate def calculate_salary(self, hours_worked): return hours_worked * self.hourly_rate # 创建员工实例 employee = Employee("John Doe", 20) salary = employee.calculate_salary(40) print(f"{employee.name}'s salary: ${salary}") ``` #### 自定义异常类 在Python中,可以通过继承`Exception`类来自定义异常。自定义异常可以更精确地处理错误情况,使代码更具可读性和可维护性。 **示例代码**: ```python class CustomError(Exception): def __init__(self, message): self.message = message def __str__(self): return self.message def divide(a, b): if b == 0: raise CustomError("Division by zero is not allowed.") return a / b try: result = divide(10, 0) except CustomError as e: print(e) ``` 通过本章的学习,我们不仅掌握了面向对象编程的基本概念,还深入了解了封装、继承和多态这三个重要特性,以及如何利用这些特性来编写高效、可维护的代码。此外,我们还学习了如何自定义异常类,以便更精细地处理程序中的错误情况。
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/release/download_crawler_static/89494537/bg1.jpg)
![](https://csdnimg.cn/release/download_crawler_static/89494537/bg2.jpg)
![](https://csdnimg.cn/release/download_crawler_static/89494537/bg3.jpg)
![](https://csdnimg.cn/release/download_crawler_static/89494537/bg4.jpg)
![](https://csdnimg.cn/release/download_crawler_static/89494537/bg5.jpg)
剩余42页未读,继续阅读
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 1479
- 资源: 15
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 基于python开发的轨道交通客流预测系统+源码+项目文档(毕业设计&课程设计&项目开发)
- 视频中截取一帧一帧的图片
- Bat-To-Exe-Converter v3.0
- 简述离线安装docker
- 为每个数据包写入时间戳的log-to-file.c
- 基于python+Jupyter开发的电车轨道与障碍物检测系统+源码+项目文档+流程解析(毕业设计&课程设计&项目开发)
- 850幅公开的抽象画图片数据集
- 几页图片看懂语法.pdf
- Accellera Standard for VERILOG-AMS - Analog and Mixed-signal Ext
- 要学习 C# 编程语言,你可以通过以下资源来开始你的学习之旅:
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)