CPython - 如何使用__dict__创建方法属性并将其添加到对象?

时间:2016-03-07 02:50:22

标签: python cpython

这可能是一个棘手的问题......

简而言之,我正在创建并添加如下方法:

static PyObject *ret_arg(PyBVHTree *self, PyObject *arg)
{
    /* just to demonstrate */
    return arg;
}
static PyMethodDef my_meth = {"ret_arg", (PyCFunction)ret_arg, METH_O, 0};       

...
    PyObject* func = PyCFunction_New(&my_meth, my_object);
    Py_DECREF(my_object);
    PyObject_SetAttrString(my_object, "ret_arg", func);
    Py_DECREF(func);
    return my_object;
}

有效!但有一些问题:(

例如:

  • 如果我del my_object。并使用新方法 CRASH
  • 当我用python关闭程序时。错误:EXCEPTION_ACCESS_VIOLATION。这对refcount来说没问题。

所以我的问题是:

这样做的正确方法是什么?

0 个答案:

没有答案