我正在编写Python 3 C extension,我想使用MappingProxyType(from types import MappingProxyType
)。从我在Cpython源代码中看到的,MappingProxyType是用Python编写的,而不是用C语言编写的。
如何在C中使用此类型?我想必须有类似C级的东西" import"然后我可以从名称中找到PyObject(或者更确切地说,PyTypeObject)作为C字符串。
答案 0 :(得分:1)
导入模块有C API。然后你只需要从模块中获取MappingProxyType
类型属性:
static PyTypeObject *import_MappingProxyType(void) {
PyObject *m = PyImport_ImportModule("types");
if (!m) return NULL;
PyObject *t = PyObject_GetAttrString(m, "MappingProxyType");
Py_DECREF(m);
if (!t) return NULL;
if (PyType_Check(t))
return (PyTypeObject *) t;
Py_DECREF(t);
PyErr_SetString(PyExc_TypeError, "not the MappingProxyType type");
return NULL;
}