Python对象';没有人给你打电话
我有一个Python2.7类(称为Child),它是另一个类(父类)的子类,它本身就是dict的子类 我试图在Child中定义Python对象';没有人给你打电话,python,python-2.7,object,inheritance,Python,Python 2.7,Object,Inheritance,我有一个Python2.7类(称为Child),它是另一个类(父类)的子类,它本身就是dict的子类 我试图在Child中定义\uu iter\uuu,希望当有人执行dict(Child\u object)时,我可以控制它如何转换为dict。不过我一定是误解了什么,因为它似乎是dict()call完全绕过调用\uuuu iter\uuuu,而是转到底层dict 我做了一些研究,从dict()方法的文档中我看到它可能首先将对象视为一个映射,因此使用它而不是iterable的\uuuuuuuuuuu
\uu iter\uuu
,希望当有人执行dict(Child\u object)
时,我可以控制它如何转换为dict。不过我一定是误解了什么,因为它似乎是dict()call完全绕过调用\uuuu iter\uuuu
,而是转到底层dict
我做了一些研究,从dict()方法的文档中我看到它可能首先将对象视为一个映射,因此使用它而不是iterable的\uuuuuuuuuuuuuuu
。是这样的吗?如果是这样的话,有没有办法覆盖映射中调用的某个方法?当您在映射中使用dict()
时(或者使用dictionary.update(…)
传递映射),Python将不会使用\iter\uu
。Python寻找.keys()
方法来检测映射。在这种情况下,如果映射恰好是dict的一个dict
或一个子类,那么将选择一个快速路径,直接从底层C结构复制键值对。使用自定义Python函数无法防止这种情况
换句话说,如果必须定义一个自定义映射类型,以控制
dict()
如何从中复制键值对,则不应将dict
子类化。通过子类化或中的类来实现您自己的映射类型。您能为您的问题添加一个简单的示例吗?这会让你更容易理解你的意思。不要从dict
继承,而是从集合继承。UserDict
否则,当你覆盖它们时,特殊方法将无法工作。谢谢,这证实了我的怀疑。我看到UserDict文档说“这个类的需求已经被直接从dict生成子类的能力所取代”,所以我选择了dict。