gpt4 book ai didi

python - dictproxy的目的是什么?

转载 作者:IT老高 更新时间:2023-10-28 20:54:46 26 4
gpt4 key购买 nike

类型的 __dict__ 是一个只读的 dictproxy 对象。我想知道它的目的是什么。它仅用于“不允许修改内置类型”吗?我找到了一种可以绕过这个的方法。我知道修改内置类型不是一个好主意。但我正在尝试修改 Cython 的 cdef class

我想知道这样修改cdef类__dict__有什么危险吗?

代码如下:

import gc
gc.get_referents(float.__dict__)[0]["square"] = lambda self: self*self
(3.14).square()

最佳答案

dictproxy(在类中找到)的目的是允许在 Python 解释器中进行优化并确保其稳定性。有关优化要求的详细信息,请参阅下面的 MartijnPieters 评论,这显然依赖于 class.__dict__ 的键始终是字符串。

dictproxy 似乎也在防止解释器中的某些不稳定性方面发挥作用。有关此类不稳定性的更多信息,请参阅 python.org 上讨论的错误报告和错误修复,标题为 Bypassing __dict__ readonlyness。 .如果您不使用某种代理机制,则可以写入 __dict__。如果可以写,可以删除。在错误报告中,他们讨论了 __dict__ 可能被删除并导致解释器崩溃的一些场景。

请注意,这与您可以直接或使用 __setitem__() 分配的类实例形成对比:

  • instance.__dict__['x'] = 1

另外,实例__dict__ 可以删除。如果它被删除,则在尝试进行属性分配时会自动重新创建它:

del instance.__dict__
实例.a = 1
instance.__dict__

结论

总之,dictproxy 允许类更优化地运行,并使解释器更稳定。

关于python - dictproxy的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25440694/

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