在运行时向python公开新类型

时间:2011-06-27 22:10:28

标签: 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是我试图定义的类型,用于测试目的。

1 个答案:

答案 0 :(得分:2)

所以我弄清楚我需要做什么,我必须在Py_Initialize之前调用一个函数,

PyImport_AppendInittab( ModuleName, ModuleInitFunction );

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

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