11

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

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

pickle 文档描述了如何使用__reduce__. 但这是一个 Python 方法——我将如何在底层 PyObject 中定义它?

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

4

1 回答 1

5

pickle模块有纯 python 和 C 变体(称为cPickle)。因此,该__reduce__方法需要可从 Python 代码调用。

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

或者,您也可以使用copy_reg模块注册酸洗功能。这个模块的原始用例是为了更好地支持扩展模块;该模块的源代码状态:

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

于 2012-09-21T12:22:46.283 回答