PYTHON 对象模型 · 状态实验 01

这份列表,到底是谁的?

两个学生对象看上去各自独立,但如果课程列表写在类的命名空间里,它们会拿到同一个可变列表。亲手给其中一人加课,再看看另一人的状态。

当前写法:courses = [] 位于类体中,两个实例沿属性查找链拿到同一份列表。

对象工作台

先选对象,再添加课程
输入课程名,然后执行列表的 append 方法
Student.courses 共享列表 #L01
现在还是空列表 []

student_a.courses ─┐ ┌─ student_b.courses
        ▼ ▼
       #L01

实验笔记


          
实验记录

还没有修改状态。试着给 student_a 添加“Python 基础”。

类属性适合放什么

所有实例都应该一致的常量或配置,例如学校名称、允许的状态集合。

实例属性适合放什么

会因对象而不同的状态,例如姓名、成绩、选课列表,通常在 __init__ 中创建。

避坑动作

需要每个对象独享的可变容器,就写成 self.courses = [],让每次实例化都创建新列表。