类与对象
2026/6/3大约 4 分钟
1.面向对象概述
1.1 什么是面向对象
面向对象编程(Object-Oriented Programming,OOP)是一种编程思想,将数据和操作数据的方法组织在一起,通过"对象"来构建程序。
Python 是一门面向对象的语言,支持面向对象的三大特性:封装、继承、多态。
1.2 封装
封装是指将对象的属性和行为隐藏起来,仅对外提供公共的访问方式。
生活中的封装:
- 电脑:内部硬件复杂,但用户只需按电源键开机
- 插板:内部有火线、零线、地线,但用户只需插上插头
代码中的封装:
# 列表的 reverse() 方法就是封装的体现
my_list = [3, 1, 2]
my_list.reverse() # 无需知道内部如何实现,调用即可1.3 继承
继承是指子类可以继承父类的属性和方法,实现代码复用。
生活中的继承:
- 子承父业:太子继承皇位、江山社稷
- 但不是所有东西都能继承(如后宫妃子)
1.4 多态
多态是指同一个事物在不同时刻表现出不同的状态和形态。
生活中的多态:
- 水:常温下是液体,高温下是气体,低温下是固体
- 人:上课时是学生,买东西时是消费者,回宿舍时是舍友
2.类和对象的概念
2.1 先有类还是先有对象
在编程中,一定是先有类,后有对象。
- 类:抽象的模板或图纸
- 对象:根据模板创建的具体实例
示例: 小米汽车 SU7 的生产流程:
- 先绘制图纸(定义类)
- 再根据图纸生产汽车(创建对象)
2.2 对象的属性和方法
描述一个对象需要两个方向:
| 方向 | 专业术语 | 说明 |
|---|---|---|
| 名词 | 属性 | 对象的外在特征(姓名、身高、年龄等) |
| 动词 | 方法 | 对象能干什么(吃、喝、学习等) |
示例: 描述一个学生
- 属性:姓名、性别、年龄、学号
- 方法:学习、吃饭、睡觉
3.定义类和创建对象
3.1 定义类的格式
Python 中定义类有三种格式:
格式1(推荐):
class 类名:
pass格式2:
class 类名():
pass格式3(继承时使用):
class 类名(父类名):
pass# 格式1
class Teacher:
pass
# 格式2
class Teacher():
pass
# 格式3(常用 object 作为父类)
class Teacher(object):
pass
t1 = Teacher()
print(t1)说明
- 格式1和格式2效果相同,格式1更简洁
- 格式3用于继承,
object是所有类的基类 - 实际开发中常用格式1或格式3
3.2 创建对象
对象名 = 类名()3.3 调用方法
对象名.方法名()3.4 完整示例
class Car:
def run(self):
print("跑")
# 创建对象
car = Car()
# 调用方法
car.run() # 输出:跑说明
class是定义类的关键字- 类名通常使用大驼峰命名法(如
Car、StudentInfo) self是类中方法的默认第一个参数,代表当前对象本身
4.self 关键字
4.1 self 是什么
self 是 Python 内置的关键字,用于表示本类当前对象的引用。
大白话: 谁调用函数,self 就代表哪个对象。
4.2 self 的作用
一个类可以创建多个对象,这些对象都可以调用类中的方法。self 的作用是区分到底是哪个对象调用的该函数。
class Car:
def run(self):
print("汽车会跑!")
print(f"我是run函数,self的值是{self}")
c1 = Car()
c1.run()
print(f"c1对象:{c1}")
c2 = Car()
c2.run()
print(f"c2对象:{c2}")说明
c1.run()时,self指向c1c2.run()时,self指向c2self的值就是当前对象的内存地址
5.属性操作
5.1 类外设置和获取属性
在类外可以通过 对象名.属性名 的方式设置和获取对象的属性。
设置属性:
对象名.属性名 = 属性值获取属性:
对象名.属性名class Car:
def run(self):
print("跑")
c1 = Car()
c1.run()
# 设置属性
c1.color = "红色"
c1.tire_num = 4
# 获取属性
print(c1.color) # 输出:红色
print(c1.tire_num) # 输出:4
c2 = Car()
c2.run()
# print(c2.color) # 报错:c2 没有 color 属性注意
类外设置的属性独属于该对象,其他对象没有这个属性。
5.2 类内获取属性
在类内可以通过 self.属性名 的方式获取对象的属性。
class Car:
def run(self):
print(f"汽车的颜色是{self.color}")
c1 = Car()
c1.color = "红色"
c1.run() # 输出:汽车的颜色是红色
c2 = Car()
c2.color = "蓝色"
c2.run() # 输出:汽车的颜色是蓝色5.3 类内访问函数
在类内可以通过 self.方法名() 的方式调用类中的其他方法。
class Car:
def run(self):
print("汽车会跑!")
def work(self):
# 类内调用其他方法
self.run()
car = Car()
car.work() # 输出:汽车会跑!说明
- 类内方法之间可以通过
self.方法名()相互调用 - 这种方式可以实现代码复用,避免重复编写相同的逻辑
