gpt4 book ai didi

python - 扩展一个以 C 对象作为参数的 Python 函数

转载 作者:行者123 更新时间:2023-11-30 14:51:33 27 4
gpt4 key购买 nike

我有一个 C 函数,它接受一个对象作为参数:

void fct(struct Objet * obj1) {
....
}

我想在Python中使用这个函数。我正在尝试解析这个论点,但找不到方法。在Python中:

static PyObject* NameMod_fct(PyObject* self, PyObject* args) {

PyObject * Obj;

if (!PyArg_ParseTuple(args, "O!", **&...**, &Obj)) { // what should I put as &Py_Type?
return NULL;
}

...
}

最佳答案

每个 Python 对象都有对其类型的引用:对于 pPyObj(类型为 PyObject*),可以使用 pPyObj->ob_type< 访问它.

这应该指向 PyTypeObject 的实例.

此时,答案很大程度上取决于相应的位置。 PyTypeObject 已“构造”。

情况 A:Objet 是用 C 编写的包装对象

就是这种情况,“我有宾至如归的感觉”(因为我完全是通过用 C/C++ 编写扩展来了解 Python 的)。应该/必须存在一个最初在 Python 中注册的 PyTypeObjectstatic 实例。只需获取并传递其地址即可。

情况 B:Objet 是非 C 库的对象

嗯...恕我直言,这是最困难的情况。您必须检索相应的地址。 PyTypeObject 实例。这可能可以通过检索响应来完成。 Python 的字典。我不能详细说,因为我没有这方面的经验。

我想一个好的开始是(重新)搜索 PyModule_GetDict()PyImport_Import() 一起.

情况C:Objet是Python内置类型的对象

最后但并非最不重要的一点——琐碎的案例。在本例中,我不会使用 O,因为内置类型还有很多其他指示符。

关于python - 扩展一个以 C 对象作为参数的 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48202262/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com