我有一个Python 2.7类(称为子类),它是另一个类(父类)的子类,该类本身是dict的子类。
我试图__iter__
在Child中定义,希望当有人这样做时,dict(child_object)
我可以控制将其转换为dict的方式。我一定会误会,因为似乎dict()调用__iter__
完全绕过了调用,而是转到底层dict。
我做了一些研究,从dict()方法的文档中,我发现它可能首先将对象视为映射,因此使用了它而不是iterable的映射__iter__
。是这种情况,如果是这样,有没有办法我可以覆盖映射上正在调用的某些方法?
当您dict()
在映射上使用(或使用dictionary.update(...)
传递映射)时,Python将不会使用__iter__
。Python寻找一种.keys()
检测映射的方法。在这种情况下,如果映射恰好是dict
dict的子类或子类,则将选择一条直接从基础C结构直接复制键值对的快速路径。您无法使用自定义Python函数阻止这种情况。
换句话说,如果必须定义一个自定义映射类型来控制dict()
复制键-值对的方式,则不应子类化dict
。通过子类化collections.Mapping
或模块中collections.MutableMapping
的类来实现自己的映射类型。UserDict
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句