什么之间的区别UserDict,dict并ABC和建议哪一种?文档似乎已经弃用了UserDict?
似乎UserDict update()会使用我的setitem方法,而dict不是?在我想要自定义setitem和getitem功能的情况下,哪些方法是非常重要的?
使用ABCs我必须实现绝对所有方法,因为它没有提供默认实现?
我想做一dict件事做两件事:
intern() 所有键和值所以其中UserDict,dict并ABC能最好地让我做到这一点?
Fer*_*yer 47
如果您想要一个实际保存数据的自定义集合,则为子类dict.如果要扩展接口(例如,添加方法),这尤其有用.
但是,没有内置方法可以调用您的自定义__getitem__/ __setitem__.如果需要完全控制这些,请创建一个实现collections.MutableMapping抽象基类的自定义类.
ABC不提供存储实际数据的方法,只提供具有某些方法的默认实现的接口.但是,这些默认实现将调用您的自定义__getitem__和__setitem__.你将不得不使用内部dict来保存数据,并实现所有抽象方法:__len__,__iter__,__getitem__,__setitem__,和__delitem__.
类UserDict从collections模块(在Python 2中,模块被称为UserDict以及)是围绕内部的包装dict,实施MutableMappingABC.如果要自定义a的行为dict,则此实现可能是一个起点.
综上所述:
dict.如果以及如何存储数据,这完全取决于您.MutableMapping使用内部"真实" dict作为存储的实现.如果你想要一个类似dict的存储集合但是覆盖一些暴露的方法dict,这对你来说可能是一个很好的起点.但请务必阅读代码以了解基本方法的实现方式,以便在覆盖方法时保持一致.