小甲鱼Python学习笔记

课程引入

  • 上节课铺垫:类和对象初步认知
  • 现存问题:懂概念但不会用,对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公私属性的实现规则