Python collections包中的UserDict类是一个映射基类,是为了便于用户自定义映射类,它实现了映射类的基本方法,用户只需要根据需要重写需要自定义的方法。
UserDict有一个data属性,是dict类型,这是UserDict真正存储数据的地方,可以直接操作这个属性,进行数据存取。
如下示例,是使用collections.UserDict作为父类,自定义的字典MyDict。
实现了__missing__方法,定义当key不存在时的,处理逻辑。
实现了__contains__方法,定义执行in操作时的处理逻辑。
实现了__setitem__方法,定义执行赋值操作时的处理逻辑。
Bash
import collections
class MyDict(collections.UserDict):
def __missing__(self, key):
if isinstance(key,str):
raise KeyError(key)
return self[str(key)]
def __contains__(self, item):
return str(item) in self.data
def __setitem__(self, key, value):
self.data[str(key)] = value
d = MyDict([('zhangsan', [88,67]), ('lisi', [78,90]), ('wangwu', [58,94])])
print(d)