这套课程按知识依赖排列。本篇的前置知识是:第 22、23、13 篇。学完后,你应该能够使用类组织一组相关状态和行为。
本篇要解决的问题
本篇只处理“类、对象、属性与方法”这一件事。示例基于 Python 3.14.6,在 macOS 环境核验;除明确标注的终端命令外,代码本身只使用 Python 标准能力。
先看清一个容易误解的细节
类定义对象应具有哪些属性和方法;调用类创建实例后,每个实例保存自己的状态,通过方法读取或更新状态。
核心概念
self表示当前实例,由方法调用自动传入。__init__在实例创建过程中初始化属性。- 只有数据和行为确实属于同一概念时才需要类,简单数据仍可使用字典。
跟着示例运行
把下面代码保存到本课脚本并运行:
class LearningRecord:
def __init__(self, course, progress=0):
self.course = course
self.progress = progress
def advance(self, amount):
self.progress = self.progress + amount
if self.progress > 100:
self.progress = 100
record = LearningRecord("Python", 40)
record.advance(15)
print(record.course, record.progress)
预期结果:
Python 55
输出中包含环境路径、集合元素或日志格式时,具体文字和顺序可能随本机环境变化;判断是否成功应以本篇说明的关键结果为准。
按执行顺序拆开看
- 调用
LearningRecord("Python", 40)创建实例,__init__把课程和进度保存在该实例属性中。 record.advance(15)自动把record作为self,方法更新同一实例的进度并限制上限。
再看一个具体细节
类是共同定义,实例则各自保存状态。
两个实例共享同一套方法定义,但 course 和 progress 属性分别属于各自实例,修改一边不会自动修改另一边。
初学者容易混淆的地方
- 调用实例方法时手工再传一次
self。通过实例调用时 Python 会自动绑定。 - 只为了存两三个没有行为的数据就创建复杂类;字典或数据类可能更合适。
练习
- 定义
Book类,保存标题和阅读页数。 - 增加方法更新阅读页数,并限制它不超过总页数。
练习应先独立完成,再通过增加 print 输出或检查文件内容观察中间状态。当前课程尚未讲到的能力,不要求提前搜索复杂写法。
本篇边界
本篇目标是使用类组织一组相关状态和行为。没有展开的高级机制会放到后续课程;先确保能够解释示例中每一行代码,再进入下一篇。
相关文章
01|Python 程序从源码到输出经历了什么
面向按顺序学习 Python 的初学者,本篇在零基础上,帮助读者理解源代码、解释器和输出之间的关系。
02|在 macOS 安装并确认 Python 3 环境
面向按顺序学习 Python 的初学者,本篇在第 01 篇知识上,帮助读者在 macOS 中确认 Python 3.14 和 pip 是否可用。
03|交互式解释器和 Python 脚本怎么选择
面向按顺序学习 Python 的初学者,本篇在第 02 篇知识上,帮助读者根据任务选择 REPL 或 `.py` 脚本。
04|建立第一个 Python 项目目录
面向按顺序学习 Python 的初学者,本篇在第 03 篇知识上,帮助读者理解当前目录并正确运行项目脚本。

