小甲鱼Python学习笔记

定制容器核心:协议(Python接口)

  • 协议特点
    • 类似其他语言接口,但非强制规范
    • 遵循鸭子类型:行为符合即视为对应类型
    • 作用:指导容器定制的方法定义
  • 容器类型分类
    • 序列类型:列表、元组、字符串
    • 映射类型:字典
    • 共性:存放多个对象

定制容器的协议要求

  • 不可变容器(如元组、字符串)
    • 必定义魔法方法:lengetitem
  • 可变容器(如列表、字典)
    • 基础方法:lengetitem
    • 新增方法:setitemdelitem
  • 其他可选魔法方法
    • iter:迭代器相关(下节课讲)
    • reversed:被reversed()调用时行为
    • contains:in/not in成员测试时行为

核心魔法方法作用

  • len:被len()调用,返回容器元素个数
  • getitem:通过下标/键获取元素(如obj[key])
  • setitem:通过下标/键设置元素值
  • delitem:删除指定下标/键的元素

实战:不可变自定义列表(CountList)

  • 需求:记录每个元素的访问次数
  • 类初始化逻辑
    • 接收可变数量参数,存入self.values列表
    • 用self.count字典统计访问次数:键为下标,值为次数,初始化为0
  • 实现必选方法
    • len:return len(self.values)
    • getitem:获取元素时,对应下标计数+1,再返回元素
  • 测试效果
    • 访问元素下标1 → count[1]自增
    • 多次访问同一下标 → 计数累计

课后作业挑战(可变CountList)

  • 需求:修改为可变列表,支持增删元素
  • 核心难点
    • 删除中间元素后,后续元素下标会前移
    • 原下标计数逻辑失效,需重新设计统计思路