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

10

在Python 3中,UserDict.DictMixin类被移动到了collections模块。文档建议使用collections.MutableMapping来替代它,然而这个抽象类并没有提供一些DictMixin所拥有的方法。

除了获取私有副本进行导入或者仅复制所需部分到自己的类中这种方式之外,还有其他(或更好的)方法来定义这些方法吗?


1
潜在有用的文章 - Yibo Yang
1个回答

5
"number of methods" 指的是具体的 __len____iter__ 方法,因此额外的工作并不多。
def __len__(self):
    return len(self.mylist)

def __iter__(self):
    for i in self.mylist:
        yield i

我认为应该可以,但尚未经过测试。

1
这个 __len__ 不会导致无限递归吗? - Thomas K
1
@ThomasK:是的,现在已经修复了。 - Lennart Regebro
注意:我认为这也需要 __setitem__ - Andy Hayden
1
是的,但是 UserDict.DictMixin 也没有定义 __setitem__,因此基于 DictMixin 的类应该已经有了它们。__delitem____getitem__ 也是如此。 - Lennart Regebro
1
关于你之前的问题:实际上,在使用MutableMapping时,你必须实现__len____iter__。它们不像我之前认为的那样是可选的。 - Lennart Regebro
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接