48

オブジェクトのレイアウトを次のように定義しているとします。

typedef struct {
    PyObject_HEAD
    // Other stuff...
} pyfoo;

...そして私の型定義:

static PyTypeObject pyfoo_T = {
    PyObject_HEAD_INIT(NULL)
    // ...

    pyfoo_new,
};

pyfooC 拡張内のどこかに新しいインスタンスを作成するにはどうすればよいですか?

4

1 に答える 1

54

PyObject_New()を呼び出し、続いてPyObject_Init () を呼び出します。

編集:最良の方法は、Python 自体と同じように、クラス オブジェクトを呼び出すことです。

/* Pass two arguments, a string and an int. */
PyObject *argList = Py_BuildValue("si", "hello", 42);

/* Call the class object. */
PyObject *obj = PyObject_CallObject((PyObject *) &pyfoo_T, argList);

/* Release the argument list. */
Py_DECREF(argList);
于 2010-11-12T09:10:44.600 に答える