代码之家  ›  专栏  ›  技术社区  ›  Cosmo

Python C API:如何从模块中获取内容

  •  -1
  • Cosmo  · 技术社区  · 7 年前

    在Python C API中,我已经知道如何通过 PyImport_ImportModule ,如中所述 Python Documentation: Importing Modules .我还知道有很多方法可以创建、分配或初始化模块,以及一些用于操作模块的函数,如中所述 Python Documentation: Module Objects .

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

    我认为这可能是一个愚蠢的问题,但我真的找不到任何教程或文档。我认为我能做到这一点的唯一方法就是使用 PyModule_GetDict 得到 __dict__ 属性并获取所需内容,如中所述 the latter documentation I mentioned .但文件也建议不要使用此功能操作模块。

    那么,从模块中获取信息有什么“官方方式”或最佳实践吗?

    0 回复  |  直到 7 年前
        1
  •  3
  •   DavidW    7 年前

    根据 documentation for PyModule_GetDict :

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

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

    你想用 PyObject_GetAttr PyObject_GetAttrString .