python:酸洗c对象

los*_*ost 11 python pickle

首先,我不期待一个解决方案,只是希望有一些关于如何开始的指示.

我有一个带嵌入式Python解释器的C程序.程序用作输入的Python脚本显然是指C语言定义的对象和函数.我现在想让这些物品中的一些可以腌制.

pickle文档描述了如何使用扩展类型进行扩展__reduce__.但这是一个Python方法 - 我如何在底层PyObject中定义它?

相当肯定我错误地理解了一些东西......

Mar*_*ers 5

pickle模块同时包含python和C变体(称为cPickle).因此,该__reduce__方法需要从Python代码中调用.

因此,您需要__reduce__在C对象PyMethodDef结构中提供具有合适实现的条目.

或者,您也可以在copy_reg模块中注册酸洗功能.该模块的原始用例是更好地支持扩展模块; 该模块的源代码说明:

这仅对为C中定义的扩展类型添加pickle支持非常有用,而不是用于用户定义类的实例.