Python C API:如何在不知道其类型的情况下将任何 Python 对象存储为 void*?
Python C API: How to store any Python Object as a void* without knowing its type?
我想知道是否可以将 任何 Python 对象 作为 void* 存储在 Python C API 中,这将是稍后返回 python 原样。
我试过这样做:
store_python_object(PyObject *self, PyObject *args)
{
int retval;
PyObject *self_capsule;
void *stored_object;
/* Parse input arguments */
retval = PyArg_ParseTuple(args,
"OO:store_python_object",
&self_capsule,
&stored_object);
if (!retval) {
return NULL;
}
// More code here...
// Return stored_object to python as-is
}
但这在存储 int 时似乎有一个奇怪的行为(同样,我想存储任何 Python 对象,而不仅仅是 int)。
找到我的问题:
我在 C 中存储了一个 python-object 而没有增加它的引用计数器(使用 Py_INCREF(PyObject *o)
)。显然 python 释放了 python 对象,这导致了奇怪的行为。
谢谢大家。
我想知道是否可以将 任何 Python 对象 作为 void* 存储在 Python C API 中,这将是稍后返回 python 原样。
我试过这样做:
store_python_object(PyObject *self, PyObject *args)
{
int retval;
PyObject *self_capsule;
void *stored_object;
/* Parse input arguments */
retval = PyArg_ParseTuple(args,
"OO:store_python_object",
&self_capsule,
&stored_object);
if (!retval) {
return NULL;
}
// More code here...
// Return stored_object to python as-is
}
但这在存储 int 时似乎有一个奇怪的行为(同样,我想存储任何 Python 对象,而不仅仅是 int)。
找到我的问题:
我在 C 中存储了一个 python-object 而没有增加它的引用计数器(使用 Py_INCREF(PyObject *o)
)。显然 python 释放了 python 对象,这导致了奇怪的行为。
谢谢大家。