定制容器核心:协议(Python接口)
- 协议特点
- 类似其他语言接口,但非强制规范
- 遵循鸭子类型:行为符合即视为对应类型
- 作用:指导容器定制的方法定义
- 容器类型分类
- 序列类型:列表、元组、字符串
- 映射类型:字典
- 共性:存放多个对象
定制容器的协议要求
- 不可变容器(如元组、字符串)
- 必定义魔法方法:len、getitem
- 可变容器(如列表、字典)
- 基础方法:len、getitem
- 新增方法:setitem、delitem
- 其他可选魔法方法
- 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)
- 需求:修改为可变列表,支持增删元素
- 核心难点
- 删除中间元素后,后续元素下标会前移
- 原下标计数逻辑失效,需重新设计统计思路