首先,我并不期待解决方案,只是希望获得一些关于如何开始的指示。
我有一个带有嵌入式 Python 解释器的 C 程序。程序用作输入的 Python 脚本显然是指 C 定义的对象和函数。我现在想让这些对象中的一些可腌制。
pickle 文档描述了如何使用__reduce__
. 但这是一个 Python 方法——我将如何在底层 PyObject 中定义它?
相当肯定我误解了一些东西......
该pickle
模块有纯 python 和 C 变体(称为cPickle
)。因此,该__reduce__
方法需要可从 Python 代码调用。
因此,您需要__reduce__
在您的 C 对象PyMethodDef
结构中提供一个具有合适实现的条目。
或者,您也可以使用copy_reg
模块注册酸洗功能。这个模块的原始用例是为了更好地支持扩展模块;该模块的源代码状态:
这仅对添加对 C 中定义的扩展类型的 pickle 支持有用,而不适用于用户定义类的实例。