3

boost.python と py++ を使用して共有ライブラリを作成しました。ライブラリで定義された型からオブジェクトをインスタンス化できます。これらのオブジェクトをjson経由でエンコード/デコードしたい。jsonpickleモジュールを使用しています。ただし、属性はエンコードされません。私はいくつかの研究をしました。__dict__エンコードされたオブジェクトが空であるため、問題が発生する可能性が最も高いです。

共有ライブラリのサンプル クラス:

struct Coordinate
{
    int x;
    int y;
    Coordinate(int aX, int aY);
}; 

これは python ラッパーです:

BOOST_PYTHON_MODULE(pyplusplus_test){
    bp::class_< Coordinate >( "Coordinate", bp::init< int, int >(( bp::arg("aX"), bp::arg("aY") )) )
        .enable_pickling()
        .def_readwrite( "x", &Coordinate::x )
        .def_readwrite( "y", &Coordinate::y );
  //...
}

Python からのコード部分:

cord = pyplusplus_test.Coordinate(10,10)
cord.x = 23
cord.y = -11
tmpStr = jsonpickle.encode(cord)
print tmpStr

そして、出力:

{"py/object": "pyplusplus_test.Coordinate"}

json 出力にxorがないことに注意してください。y

なにか提案を?

ありがとう。

4

0 に答える 0