- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
类型的 __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/
我正在编写一个使用 multiprocessing.managers.DictProxy 的程序。程序遍历一个目录,通过pwd.getpwuid(os.stat(file)[4])[0]得到的user
我正在 python 中使用多处理模块,并使用 mp 管理器提供的共享变量列表和字典。 import multiprocessing as mp a = mp.Manager() b = a.l
我有一个使用 multiprocessing.Manager().dict() 创建的 DictProxy 对象来支持并发。在运行结束时,我需要将字典序列化为 JSON。但不清楚如何将 DictPro
我正在尝试将 JSON 对象加载到 DictProxy 对象中,但没有看到“简单”的方法。我可以很容易地将 JSON 加载到字典中,但如果我尝试将此 dict 复制到 DictProxy 中,它仍然是
我是一名优秀的程序员,十分优秀!