python嵌入,定义新类型,如何在c端创建新实例

问题描述

我正在读python c Defining New Types。我不知道,在定义了新类型之后,如何在c端创建新的Noddy实例。例如,创建方法noddy.create_default_noddy

我已经尝试过了。但并不幸运。

static PyObject *noddy_createDefaultNoddy(PyObject *self,PyObject *args) {
    // yes we can't create an object like this.
    auto *noddy = new Noddy;
    return (PyObject *)noddy;
}

解决方法

阅读一些代码后。我发现正确的方法是:

static PyObject *noddy_getDefaultNoddy(PyObject *self,PyObject *args) {
    Noddy *foo;

    foo = (Noddy*)noddyType.tp_alloc(&noddyType,0);
    foo->first = Py_BuildValue("%s","first name from c");
    assert(foo != nullptr);
    return (PyObject*)foo;
}