python:酸洗c对象

时间:2012-09-21 12:09:14

标签: python pickle

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

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

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

相当确定我误解了一些事情......

1 个答案:

答案 0 :(得分:5)

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

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

或者,您也可以使用copy_reg module注册酸洗功能。该模块的原始用例是更好地支持扩展模块;模块的source code表示:

  

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