从C导入标准Python库

时间:2016-02-07 11:50:54

标签: python c python-3.x python-c-extension

我正在编写Python 3 C extension,我想使用MappingProxyType(from types import MappingProxyType)。从我在Cpython源代码中看到的,MappingProxyType是用Python编写的,而不是用C语言编写的。

如何在C中使用此类型?我想必须有类似C级的东西" import"然后我可以从名称中找到PyObject(或者更确切地说,PyTypeObject)作为C字符串。

1 个答案:

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