【问题标题】:How to achieve the functionality of UserDict.DictMixin in Python 3?如何在 Python 3 中实现 UserDict.DictMixin 的功能?
【发布时间】:2012-06-25 06:47:47
【问题描述】:

在 Python 3 中,UserDict.DictMixin 类已移至 collections 模块。文档建议使用collections.MutableMapping 代替它,但是这个抽象类没有提供DictMixin 执行/执行的许多方法。

除了获取UserDict.Mixin 源的私有副本以将其导入(或者可能只是将其所需部分复制)到我自己的类字典类中之外,是否还有另一种(或更好的)方法来定义它们?

【问题讨论】:

标签: dictionary python-3.x dictmixin


【解决方案1】:

“方法数”具体为__len____iter__,因此额外的工作并不多。

def __len__(self):
    return len(self.mylist)

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

我认为应该可以(但未经测试)。

【讨论】:

  • __len__ 不会导致无限递归吗?
  • @ThomasK:是的,现在已修复。
  • 你是对的,当然。我误解了我在ABCs 的文档中看到的内容。例如,我想知道在 Py 2.x DictMixin.py 中为该类定义的所有缺少的 interxxx() 方法......显然忘记了它们在 Py 3.x 中不存在。感谢您帮助我认识到我的错误印象。
  • 是的,但是,UserDict.DictMixin 也没有定义__setitem__,所以你的基于 DictMixin 的类应该已经有了它们。 __delitem____getitem__ 也是如此。
  • 关于您之前的问题:事实上,当您使用 MutableMapping 时,您必须实现__len____iter__。它们不像我之前想的那样是可选的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 2010-11-30
相关资源
最近更新 更多