Dictionary 如何在Python 3中实现UserDict.DictMixin的功能?
在Python3中,Dictionary 如何在Python 3中实现UserDict.DictMixin的功能?,dictionary,python-3.x,dictmixin,Dictionary,Python 3.x,Dictmixin,在Python3中,UserDict.DictMixin类被移动到collections模块。文档建议使用collections.MutableMapping代替它,但是这个抽象类没有提供DictMixin所提供的许多方法 除了抓取UserDict.Mixin源代码的私有副本以便导入(或者可能只是复制它所需的部分)到我自己的类似字典的类中之外,还有其他(或更好的)方法来定义它们吗?方法的数量特别是\uuu len\uuu和\uu iter\uuuu,因此额外的工作并不多 def __len__(
UserDict.DictMixin
类被移动到collections
模块。文档建议使用collections.MutableMapping
代替它,但是这个抽象类没有提供DictMixin
所提供的许多方法
除了抓取UserDict.Mixin
源代码的私有副本以便导入(或者可能只是复制它所需的部分)到我自己的类似字典的类中之外,还有其他(或更好的)方法来定义它们吗?方法的数量特别是\uuu len\uuu
和\uu iter\uuuu
,因此额外的工作并不多
def __len__(self):
return len(self.mylist)
def __iter__(self):
for i in self.mylist:
yield i
我认为应该是可行的(不过没有经过测试)。那不是会导致无限递归吗?@ThomasK:是的,现在已经修好了。当然,你是对的。我误解了我在文档中看到的内容。例如,我想知道Py 2.x DictMixin.Py中为类定义的所有缺少的
interxxx()
方法……显然忘记了它们在Py 3.x中不存在。谢谢你帮助我认识到我的错误印象。是的,但是,UserDict.DictMixin也没有定义\uuu setitem\uuu
,所以基于DictMixin的类应该已经有了它们。同样适用于\uuuu delitem\uuuu
和\uuuu getitem\uuuu
。关于您前面的问题:事实上,当您使用可变映射时,您必须实现\uuu len\uuuuu
和\uuuuu iter\uuuu
。它们不像我以前想的那样是可选的。可能会有帮助