首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用对象名返回PyObject的python函数是什么?

使用对象名返回PyObject的python函数是什么?
EN

Stack Overflow用户
提问于 2022-09-13 13:52:25
回答 1查看 42关注 0票数 0

我正在将Python嵌入到我的C++中,并创建PyObjects来表示我的数据/对象( into、doubles、strings等等)。

为了找到上述问题的答案,我花了几个小时,我预计会有一个" name“属性或"name()”方法来设置,并引用Python脚本中使用的规范对象名称(作为全局/本地对象),这样就会有一个函数:

代码语言:javascript
复制
PyObject *PyObject_ByName(PyObject *PyObjs, char* name)

返回值:新引用。是稳定ABI的一部分。从与“名称”匹配的PyObjs数组中返回一个新的PyObjs引用,如果失败,则返回NULL。

我遗漏了什么?我看到其他所有的东西都就位了。

代码语言:javascript
复制
MSEXPORT PyObject* PyVariant(VarObj* data, tLvVarErr* error) {
    PyObject* module_name, * module, * dict, * python_class, * object;

    PyObject *pValue = NULL; // <- what I want to set name
    switch (data->data.index())
    {
    case VarIdx::I32:
        pValue = PyLong_FromLong((long) get<int32_t>(data->data));
        break;
    case VarIdx::DBL:
        pValue = PyFloat_FromDouble ((double) get<double>(data->data));
        break;
    case VarIdx::Str :
        pValue = PyUnicode_FromString((char*) get<string*>(data->data)->c_str());
        break;
    default:
        return NULL;
    }
    return pValue;
}
EN

回答 1

Stack Overflow用户

发布于 2022-09-13 14:32:08

您需要知道的是Python名称空间是基于字典实现的(函数中的本地命名空间是例外)。全局名称查找只是为了获得全局名称空间字典并搜索字符串键。因此,您需要做的是:

  1. 使用PyEval_GetGlobals获取全局命名空间,
  2. 使用PyUnicode_FromString通过C字符串构造字符串对象,
  3. 使用PyDict_GetItem从全局命名空间获取对象。

G 210

至于我在注释区域中提到的_PyDict_LoadGlobal,它是Python内部用来快速加载对象的API (从函数名称的下划线开始)。在编写C扩展时,应该避免使用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73704219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档