苏眠月|我是这样学会了Python中类与对象知识,网上没有看到的见解( 三 )

  • 上方为自定义类中的函数 , 下方是"字典实现" 中的函数
  • 注意其中的 self 参数 与之对应的参数 st
"字典实现"方式中 , 我们已经了解到 , 之所以需要参数 st, 是因为在 show_me 函数执行中 , 需要对应某位学生的信息(数据字典) 。
同理 , 学生类中定义的 show_me 函数的第一个参数 self, 实际就是调用时 , 要传入实例本身 。
这听起来像绕口令一样 , 如果我换一种方式执行 show_me 就很清晰:
苏眠月|我是这样学会了Python中类与对象知识,网上没有看到的见解
  • 通过 类名 + 点 + 函数名字 + 括号 , 可以调用该函数
  • 实际上 , 这才是调用时的真面目!
因此 , 如下2种方式的调用是一样的:
苏眠月|我是这样学会了Python中类与对象知识,网上没有看到的见解
  • 前者(行3)只是后者(行5)的快捷方式
你是不是以为 , 这个函数 show_me 也像"字典实现"方式中那样 , 在字典中保存了这个函数呢?
如果你查看某些学生信息字典时 , 会发现并不是这样子:
苏眠月|我是这样学会了Python中类与对象知识,网上没有看到的见解其实这想法已经很接近答案 , 因为这个函数不需要在每个学生信息字典中保存 , 只需要在类的信息字典中保存一份就可以:
苏眠月|我是这样学会了Python中类与对象知识,网上没有看到的见解实际上 自定义类 St, 也是一个对象 , 因此他也有 __dict__ 等各种常规对象的函数 。 这超出本文主题 , 请参考其他相关文章
总结类是模板 , 对象是按照模板生成的物体
这是很多教程使用的比喻方式 。
自定义类 , 决定了 每位学生的信息字典中需要哪些数据(姓名、年龄等)与操作(show_me) 。 这类似于一个模板 。
从自定义类中生成实例 , 相当于按模板构造出带实际数据的信息字典 。
可以看出来 , 每次构造出的学生实例 , 他们都是独立的信息字典 , 大家互不影响 , 各自为政 。
【苏眠月|我是这样学会了Python中类与对象知识,网上没有看到的见解】当然 , 类还具备很多面向对象的特性 , 能让我们创建更多通用工具 , 以后有机会再分享吧


推荐阅读