5

代替の「コンストラクター」にいくつかの静的メソッドを提供する 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()か?

4

1 に答える 1

6

Python 2.3 以降では、METH_CLASSを使用して実行できます。サンプルについては、 datetimeモジュールを参照してください。

于 2013-11-12T21:17:25.587 に答える