Python 字典子类:优雅扩展字典功能的实践
一、字典基础回顾:理解 Python 的 dict
在深入探讨字典子类之前,让我们先简要回顾一下 Python 字典的基本特性:
Python 字典
哈希表实现
无序集合
可变数据类型
O1 平均时间复杂度
Python 3.7+保持插入顺序
可动态增删键值对
标准字典提供了以下核心功能:
- 快速键值查找
- 动态大小调整
- 键的唯一性保证
- 丰富的内置方法(
get(),update(),pop()等)
二、为什么要创建字典子类?
标准字典虽然强大,但在某些场景下我们需要额外的功能或行为修改:
- 自动默认值:访问不存在的键时返回默认值而非抛出异常
- 键转换:自动将键转换为特定格式(如小写)
- 历史记录:跟踪字典的修改历史
- 类型限制:限制键或值的类型
- 持久化:自动将修改保存到数据库或文件
三、创建字典子类的三种方式
1. 直接继承 dict 类
这是最直接的方式,我们可以重写字典的方法或添加新方法:
class EnhancedDict(dict):
"""增强型字典,提供大小写不敏感的键访问"""
def __getitem__(self, key):
return super().__getitem__(key.lower())
def __setitem__(self, key, value):
super().__setitem__(key.lower(), value)
2. 使用 collections.UserDict
UserDict 是专门为继承而设计的包装类,相比直接继承 dict 更不容易出错:
from collections import UserDict
class HistoryDict(UserDict):
"""记录修改历史的字典"""
def __init__(self, *args, **kwargs):
().__init__(*args, **kwargs)
.history = []
():
.history.append()
().__setitem__(key, value)


