课程引入
- 上节课铺垫:类和对象初步认知
- 现存问题:懂概念但不会用,对OOA/OOD/OOP等名词困惑
- 本节课目标:剖析Python对象三大核心主题
主题一:self参数是什么
- 类比理解:房子的门牌号 → 区分同一类的不同实例
- 底层逻辑
- 同一类可生成无数相似对象
- 调用对象方法时,对象自动将自身作为第一个参数传给self
- Python通过self识别调用方法的具体对象
- 代码示例(Ball类)
- 定义:set_name()方法赋值self.name,kick()方法打印self.name
- 实例化:a=Ball()、b=Ball()、c=Ball(),分别设置不同name
- 调用效果:a.kick()和c.kick()输出对应名字,证明self绑定具体实例
- 核心要求:类中定义方法时,第一个参数必须写self
主题二:Python的魔法方法——init
- 魔法方法共性
- 特征:双下划线包围的特殊方法
- 机制:满足特定条件时Python自动调用
- 作用:为类增加特殊功能
- __init__方法详解
- 别称:构造方法
- 触发时机:实例化对象时自动调用
- 核心作用:自定义对象的初始化操作
- 参数传递:实例化时传入的参数自动传给__init__
- 代码示例优化(Ball类)
- 重写__init__:添加name参数,直接赋值self.name
- 实例化简化:b=Ball("土豆"),无需手动调用set_name()
- 注意点:未设默认参数时,实例化必须传参,否则报错
主题三:公有和私有属性/方法
- 其他语言对比:用private/public关键字区分公私
- Python的默认规则:属性和方法默认公有,可通过点操作符直接访问
- Python实现私有特性的方式:名字改编(name mangling)
- 定义规则:变量/方法名前加双下划线(如__name)
- 外部访问限制:直接用实例.__name无法访问,提示找不到属性
- 私有属性的访问方式
- 合法方式:类内部定义方法(如get_name()),通过方法返回私有属性
- 底层本质:伪私有机制
- 名字改编原理:__name会被自动改为_类名__name
- 强制访问:可通过实例._类名__name直接访问(不推荐)
- 学习提示:暂不理解没关系,后续讲继承时会豁然开朗
课程总结
- 掌握self参数的绑定逻辑
- 学会用__init__方法简化对象初始化
- 了解Python公私属性的实现规则