Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dictionary 如何在Python 3中实现UserDict.DictMixin的功能?_Dictionary_Python 3.x_Dictmixin - Fatal编程技术网

Dictionary 如何在Python 3中实现UserDict.DictMixin的功能?

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__(

在Python3中,
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
。它们不像我以前想的那样是可选的。可能会有帮助