我正在写一个Python 3 C extension,我想在其中使用MappingProxyType(from types import MappingProxyType)。根据我在Cpython源代码中看到的内容,MappingProxyType是用Python而不是C编写的。

如何从C使用这种类型?我想象必须有一个像C级的“导入”之类的东西,然后我才能从名称中找到一个PyObject(或更确切地说,PyTypeObject)作为一个C字符串。

最佳答案

有一个C API用于导入模块。然后,您只需要从模块获取MappingProxyType type属性:

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;
}

关于python - 从C导入标准Python库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35253097/

10-10 16:13