gpt4 book ai didi

Python 对象 __iter__ 没有被调用

转载 作者:行者123 更新时间:2023-12-01 01:31:17 26 4
gpt4 key购买 nike

我有一个 Python 2.7 类(称之为 Child),它是另一个类(Parent)的子类,而另一个类本身就是 dict 的子类。

我正在尝试定义 __iter__在 child 中希望当有人做dict(child_object)时我可以控制它如何转换为字典。我一定是误解了什么,因为 dict() 调用似乎绕过了调用 __iter__完全,而是转到底层字典。

我做了一些研究,从 dict() 方法的文档中我发现它可能首先将对象视为映射,因此使用它而不是可迭代的 __iter__ 。是这样吗?如果是这样,有没有办法可以覆盖映射上调用的某些方法?

最佳答案

当您在映射上使用 dict() (或使用 dictionary.update(...) 传递映射)时,Python 将不会使用 __iter__。 Python 寻找 .keys() 方法来检测映射。在这种情况下,如果映射恰好是 dict 或 dict 的子类,则会选择直接从底层 C 结构复制键值对的快速路径。您无法使用自定义 Python 函数来阻止这种情况。

换句话来说,如果您必须定义一个自定义映射类型来控制 dict() 如何从中复制键值对,那么您不应该对 dict 进行子类化。通过子类化 collections.Mapping 实现您自己的映射类型或collections.MutableMappingUserDict module 中的一个类.

关于Python 对象 __iter__ 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52836173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com