【发布时间】:2020-11-12 07:06:17
【问题描述】:
我一直致力于多处理和 C++ 扩展,但我不太了解 __getstate_manages_dict__ 函数(我知道如何使用它,但我不确定它是如何工作的)。 boost/Python documentation for pickle support 是这样说的:
Boost.Python 扩展类的作者可能提供了一个
__getstate__方法而没有考虑以下可能性: * 他的类在Python 中用作基类。很可能需要对派生类实例的 dict 进行腌制以正确恢复实例。 * 用户直接将项目添加到实例的__dict__。同样,实例的__dict__需要被腌制。
为了提醒用户注意这个非常不明显的问题,安全卫士是 假如。如果定义了
__getstate__并且实例的__dict__是 不为空,Boost.Python 测试类是否有属性__getstate_manages_dict__。如果未定义此属性,则会引发异常:
我见过一些例子,其中对象的__dict__ 在__getstate__ 中返回,然后在__setstate__ 中更新。 __dict__ 指的是什么?是派生类对象的__dict__ 属性吗?另外,如果pickle调用__init__创建一个新对象然后设置属性,为什么需要显式处理这个dict?
谢谢
【问题讨论】:
标签: python c++ oop pickle boost-python