Python std方法层次结构调用记录?

Dav*_*ric 1 python python-datamodel

刚刚在dict"type"子类中遇到问题.我确实覆盖了__iter__方法,并期望它会影响其他方法,如iterkeys,keys等.因为我相信他们调用__iter__方法来获取值,但似乎它们是独立实现的,我必须覆盖所有这些.

这是一个错误或意图他们没有使用其他方法并分别检索值?

我没有在标准Python文档中找到标准类方法之间调用依赖关系的描述.对于子类化工作和方向来说,为了正确的行为需要覆盖哪些方法,这将是很方便的.是否有一些关于python基类型/类内部的补充文档?

Joc*_*zel 5

子类MappingMuteableMapping收藏模块,而不是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模块中的相应基类.