我已经完成并定义了我的新类型,将它们存储在一个 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/