代替の「コンストラクター」にいくつかの静的メソッドを提供する C++ クラスの Python ラッパーを作成しています。これらをpython c-apiを介してエクスポートする方法を知りたいですか?
関連する C++ コードのスタブを次に示します。
PyObject *PyFoo_FromFoo(Foo foo);
// This should be a class method that create a new instance of PyFoo().
PyObject *
PyFoo_Gen1(PyObject *self, PyObject *args)
{
Foo foo; // Init this according to args
return PyFoo_FromFoo(foo);
}
static PyMethodDef PyFoo_methods[] = {
{"Gen1", (PyCFunction)PyFoo_Gen1, METH_VARARGS, "Gen1 foo creator" },
{NULL} /* Sentinel */
};
PyTypeObject PyFooType = {
:
PyFoo_methods, /* tp_methods */
:
}
PyObject *PyFoo_FromFoo(Foo foo)
{
PyFoo *v = (PyFoo*)PyObject_New(PyFoo, &PyFooType);
v->foo = foo;
return (PyObject*)v;
}
classmethod()
上記の例で、(直接または@classmethod
デコレータを介して)関数を使用することに対応するものは何でしょうGen1()
か?