Dav*_*ric 1 python python-datamodel
刚刚在dict"type"子类中遇到问题.我确实覆盖了__iter__方法,并期望它会影响其他方法,如iterkeys,keys等.因为我相信他们调用__iter__方法来获取值,但似乎它们是独立实现的,我必须覆盖所有这些.
这是一个错误或意图他们没有使用其他方法并分别检索值?
我没有在标准Python文档中找到标准类方法之间调用依赖关系的描述.对于子类化工作和方向来说,为了正确的行为需要覆盖哪些方法,这将是很方便的.是否有一些关于python基类型/类内部的补充文档?
子类Mapping或MuteableMapping从收藏模块,而不是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)
Run Code Online (Sandbox Code Playgroud)
要子类化任何内置容器,应始终使用collections模块中的相应基类.