面向对象编程
1. 什么是面向对象编程
- 面向对象编程(OOP,Object Oriented Programming):一种程序设计思想,把对象作为程序的基本单元。
- 对象:包含数据和操作数据的函数(即“数据 + 行为”)。
2. 面向过程 vs 面向对象
| 思想 | 程序视为 | 特点 |
|---|---|---|
| 面向过程 | 一系列命令,即一组函数的顺序执行 | 把函数继续切分为子函数,大块→小块,降低复杂度 |
| 面向对象 | 一组对象的集合 | 每个对象可接收并处理其他对象发来的消息;程序执行 = 消息在对象之间传递 |
- 在 Python 中,所有数据类型都可视为对象,也可自定义对象;自定义的对象数据类型就是类(Class)。
3. 示例:学生成绩
面向过程写法
- 用 dict 表示一个学生;用函数处理成绩。
std1 = {'name': 'Michael', 'score': 98}
std2 = {'name': 'Bob', 'score': 81}
def print_score(std):
print('%s: %s' % (std['name'], std['score']))
面向对象写法
- 把 Student 视为一种对象,拥有 name、score 等属性(Property)。
- 打印成绩:先创建该学生对象,再给对象发 print_score 消息,让对象自己把数据打印出来。
- 发消息 = 调用对象的方法(Method)。
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print('%s: %s' % (self.name, self.score))
bart = Student('Bart Simpson', 59)
lisa = Student('Lisa Simpson', 87)
bart.print_score() # 给对象发消息
lisa.print_score()
4. 类(Class)与实例(Instance)
- 思想来自自然界:Class 是抽象概念(如“学生”);Instance 是具体对象(如 Bart、Lisa 两个具体学生)。
- 面向对象的设计:先抽象出 Class,再根据 Class 创建 Instance。
- 抽象程度:OOP 比函数更高,因为一个 Class 既包含数据,又包含操作数据的方法。
5. 面向对象三大特点
- 数据封装、继承、多态是面向对象的三大特点,后续章节会详细讲解。
小结
| 要点 | 说明 |
|---|---|
| OOP | 以对象为基本单元,对象 = 数据 + 操作数据的函数 |
| 面向过程 | 程序 = 函数顺序执行;面向对象 = 程序 = 对象集合,消息在对象间传递 |
| Class / Instance | Class 是抽象类型,Instance 是具体对象;先抽象 Class,再创建 Instance |
| 属性 / 方法 | 对象的数据即属性;发消息即调用方法 |
| 三大特点 | 数据封装、继承、多态 |
记忆:对象 = 数据 + 方法;类 = 抽象,实例 = 具体;发消息 = 调方法。