首页 > 解决方案 > Python C API:如何从模块中获取内容

问题描述

在 Python C API 中,我已经知道如何通过 导入模块PyImport_ImportModule,如Python 文档:导入模块中所述。我也知道有很多方法可以创建或分配或初始化模块以及一些用于操作模块的函数,如Python 文档:模块对象中所述。

但是我如何从模块中获取函数(并调用它),或者从模块中获取类型/类(并实例化它),或者从模块中获取对象(并对其进行操作),或者获取任何东西从一个模块做我想做的任何事情?

我认为这可能是一个愚蠢的问题,但我真的找不到任何教程或文档。我认为可以实现此目的的唯一方法是使用PyModule_GetDict获取__dict__模块的属性并获取我想要的内容,如我提到的后一个文档中所述。但文档也建议不要使用此功能来操作模块。

那么从模块中获取某些东西的任何“官方方式”或最佳实践?

标签: pythonpython-c-api

解决方案


根据以下文档PyModule_GetDict

建议扩展使用其他PyModule_*()PyObject_*()功能,而不是直接操作模块的__dict__.

您需要的函数是通用对象函数 ( PyObject_*) 而不是模块函数 ( PyModule_*),我怀疑这是您找错地方了。

您想使用PyObject_GetAttrPyObject_GetAttrString


推荐阅读