2
C++で書かれたPython拡張モジュールをBoost.PythonからSWIGに移植します。SWIGを使ってPython __init__関数でC++ファクトリメソッドをラップする方法
C++コードは、静的ファクトリメソッド
class X {
public:
static X* create(const char* descr);
...
};
と抽象クラスX
を定義ファクトリメソッドは、いくつかの派生クラスのインスタンスへのポインタを返します。 Boost.Pythonで
あなたはX::create
を呼び出し
__init__(self, descr)
メソッドを持つPythonクラスX
にC++クラスX
をラップすることができます。実際には、次のように行われます。
namespace bp = boost::python;
bp::class_<X>("X", boost::no_init)
.def("__init__", bp::make_constructor(&X::create))
...
SWIGで同じことをする方法はありますか?
C++コードがコンストラクタを使用しない理由はありますか?ファクトリ関数が受け入れられないため、ファクトリ関数を反映する理由はありますか? –
factor関数を '__init__'ではなく' __new__'として使用する方が適切でしょうか? – Marcin
@ user763305:オブジェクト作成を制御するので、 '__new__'は適切な場所です。 '__init__'はインスタンスの状態の初期化を制御します – Daenyth