首先,我不期待一个解决方案,只是希望有一些关于如何开始的指示。
我有一个带嵌入式Python解释器的C程序。程序用作输入的Python脚本显然是指C语言定义的对象和函数。我现在想让这些物品中的一些可以拾取。
pickle文档描述了如何使用__reduce__
选择扩展类型。但这是一个Python方法 - 我如何在底层PyObject中定义它?
相当确定我误解了一些事情......
答案 0 :(得分:5)
pickle
模块同时包含python和C变体(称为cPickle
)。因此,__reduce__
方法需要从Python代码中调用。
因此,您需要在C对象PyMethodDef
struct中提供具有合适实现的__reduce__
条目。
或者,您也可以使用copy_reg
module注册酸洗功能。该模块的原始用例是更好地支持扩展模块;模块的source code表示:
这仅对为C中定义的扩展类型添加pickle支持非常有用,而不是用于用户定义类的实例。