METHOD BINDING · PROPERTY GATE

一次点号调用,Python 做了什么?

你写的是 student.report(),方法定义却明明需要 self。沿着调用链逐步走一遍,就能看见实例是怎样被自动塞进第一个参数的;再用 property 看守分数,阻止对象进入无效状态。

student.py · 当前执行位置

      

调用观察器

准备执行
调用表达式student.report()从实例访问方法
绑定结果student.report等待属性查找
实际调用Student.report(?)第一个参数尚未填入

self 指向谁

先看表面写法

调用代码没有手写 self。下一步,Python 会从实例开始查找 report

>>> 等待执行
步骤 1 / 4
self 不是关键字

名字来自约定,真正重要的是它处在实例方法的第一个参数位置。

绑定发生在访问时

student.report 已经把函数与 student 实例绑在一起,可以保存后再调用。

property 保留点号语法

外部仍写 student.score = 95,内部却能先验证再决定是否保存。

验证守住对象状态

不要让错误值先进入对象再到处补救;把规则集中放在状态入口处。