11

まず、解決策を期待しているわけではありません。開始方法に関するいくつかの指針を期待しています。

Python インタープリターが組み込まれた C プログラムがあります。プログラムが入力として使用する Python スクリプトは、明らかに C 定義のオブジェクトと関数を参照しています。これらのオブジェクトのいくつかを pickleable にしたいと思います。

pickle のドキュメントでは、 を使用して拡張タイプを pickle 化する方法について説明して__reduce__います。しかし、これは Python メソッドです。基になる PyObject でこれをどのように定義すればよいでしょうか?

確かに私は何かを誤解しています...

4

1 に答える 1

5

このpickleモジュールには、python のみと C バリアント ( と呼ばれるcPickle) の両方があります。そのため、__reduce__メソッドは Python コードから呼び出せる必要があります。

したがって、適切な実装を使用して C オブジェクト構造体__reduce__にエントリを提供する必要があります。PyMethodDef

別の方法として、ピクリング関数をcopy_regmoduleに登録することもできます。このモジュールの本来のユースケースは、拡張モジュールをより適切にサポートすることでした。モジュールのソースコードには次のように記載されています。

これは、ユーザー定義クラスのインスタンスではなく、C で定義された拡張型の pickle サポートを追加する場合にのみ役立ちます。

于 2012-09-21T12:22:46.283 に答える