Python C API:如何从模块中获取信息

时间:2019-04-27 16:00:19

标签: python python-c-api

在Python C API中,我已经知道如何通过PyImport_ImportModule导入模块,如Python Documentation: Importing Modules中所述。我也知道,有很多创建或分配或初始化模块的方法以及一些操作模块的功能,如Python Documentation: Module Objects中所述。

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

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

那么,从模块中获取某些东西的任何“正式方式”或最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

根据documentation for PyModule_GetDict

  

建议扩展程序使用其他PyModule_*()PyObject_*()函数,而不是直接操纵模块的__dict__

您需要的功能是通用对象功能(PyObject_*)而不是模块功能(PyModule_*),我怀疑这是您在错误的地方查找的地方。

您要使用PyObject_GetAttrPyObject_GetAttrString