刚刚在字典“类型”子类化时遇到问题。我确实覆盖了 __iter__ 方法,并预计它会影响其他方法,如 iterkeys、keys 等,因为我相信它们调用 __iter__ 方法来获取值,但它们似乎是独立实现的,我必须覆盖所有这些方法。
这是一个错误还是他们不使用其他方法并单独检索值的意图?
我没有在标准 Python 文档中找到标准类方法之间调用依赖关系的描述。这对于子类化工作和定向需要覆盖哪些方法以实现正确的行为会很方便。是否有一些关于 python 基本类型/类内部的补充文档?
请您参考如下方法:
子类 Mapping 或 MuteableMapping 来自 collections module而不是 dict,您可以免费获得所有这些方法。
下面是一个最小映射示例和一些您可以免费获得的方法:
import collections
class MinimalMapping(collections.Mapping):
def __init__(self, *items ):
self.elements = dict(items)
def __getitem__(self, key):
return self.elements[key]
def __len__(self):
return len(self.elements)
def __iter__(self):
return iter(self.elements)
t = MinimalMapping()
print (t.iteritems, t.keys, t.itervalues, t.get)
要对任何内置容器进行子类化,您应该始终使用集合模块中的适当基类。
