python - 在运行时向 python 公开一个新类型

标签 python c module runtime python-extensions

我已经完成并定义了我的新类型,将它们存储在一个 pytypeobject 中并调用了以下函数(在初始化解释器之后):

PyType_Ready();//这需要我定义的类型

PyModule_AddObject();//这将定义的类型添加到我使用创建的模块 PyModule_Create();

现在,当我尝试使用我定义的类型时,解释器说它不存在,所以我假设必须采取另一个步骤才能在运行时添加类型,或者有一些其他的集合我必须采取的步骤来实现这一目标。

任何帮助将不胜感激。

Python 语法错误:

Traceback (most recent call last):
  File "testscript.py", line 1, in <module>
    import Bound
ImportError: No module named Bound

测试脚本内容:

import Bound
l = Bound.Foo()

Bound 是我定义模块的名称,Foo 是我尝试定义的类型,用于测试目的。

最佳答案

所以我想出了我需要做什么,我必须在 Py_Initialize 之前调用一个函数,

PyImport_AppendInittab( ModuleName, ModuleInitFunction );

这会将模块名称添加到 python 模块字典中,因此当您调用 import ModuleName 时,如果是第一次,它将调用 ModuleInitFunction(我, 但没有在正确的地方使用 ), 这会创建模块。现在,在创建模块后,您可以继续在运行时向其添加类型,这就是我所做的。

现在我可以在运行时成功地将用户定义的 C++ 类绑定(bind)到 python,然后在我们的游戏引擎的脚本中使用它们。现在我正在解决运行时问题,但它应该会在接下来的几天内启动并运行。无论如何,如果有人决定将 Python 嵌入到游戏引擎中以编写脚本,我相信我可以提供帮助。

关于python - 在运行时向 python 公开一个新类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6499531/

相关文章:

python - 使用 Python 和 ftplib 检查 FTP 服务器上的对象是文件还是目录

javascript - 尝试在 javascript 中使用该库时无法找到模块 'collections/dict'

python - 无法从 Trac 获取数据库连接?

python - 使用 with open 从 Web API 缓存结果

MPI sendbuf 和 recvbuf 可以是一回事吗?

c - Visual Studio 2017 上忽略了 typedef

javascript - 如何使用 requirejs 覆盖 vendor 库

javascript - 如何仅引用文件中的一个变量而不是node.js 中的所有导出?

python - 使用 pandas 中的 ffill 在以下 NaN 之间分配值

c - C 中的动态代码