UserDict.UserDict自从Python
2.2起,它没有实质性的附加值,因为,正如@gs所提到的,您现在可以
dict直接子类化-它仅用于与Python
2.1及更早版本的向后兼容性,而内置类型不能是子类。仍然将其保留在Python
3中(现在已在
collections模块中的适当位置),因为如文档现在所述,
直接从dict继承子类的能力已部分取代了对此类的需要。但是,由于可以将底层字典作为属性来访问,因此可以更轻松地使用此类。
UserDict.DictMixin在Python 2中非常方便-正如文档所述,
该模块定义了一个mixin DictMixin,它为已经具有最小映射接口的类定义了所有字典方法。这大大简化了需要替换为词典的编写类(例如,搁置模块)。
您将其子类化,定义一些基本方法(至少
__getitem__对于没有能力获取键或进行迭代的只读映射就足够了;同样,
keys如果您需要这些能力,则可能
__setitem__;并且您有没有能力的R
/
W映射删除项目;添加
__delitem__以提供完整功能,并可能出于性能原因而覆盖其他方法),并获得
dict丰富API的完整实现(
update,
get等)。模板方法设计模式的一个很好的例子。
在Python 3中,
DictMixin它消失了;您可以通过依赖(或仅用于R / O映射)获得 几乎
相同的功能。它虽然更不方便,但还是有点优雅(请参阅本期,该主题以“无法解决”结束;简短的讨论值得一读)。
collections.MutableMapping``collections.Mapping



