我已经阅读了有关如何使用我自己的模块扩展python的教程:
http://docs.python.org/release/3.1.3/extending/embedding.html#embedding-python-in-c
但是我如何扩展python以便我的模块包含一个可以在python中使用的类?我用C ++编写的课程。
我之前尝试过使用boost :: python,但是当我尝试在mac os x上构建时,bjam会挂在我身上。我想保持简单,因为我的要求非常简单:
我的模块中有三个函数,我称之为initialise(),run()和close()。
目前我在python中执行此操作:
import mymodule
mymodule.initialise()
mymodule.run()
mymodule.run() # run again
mymodule.close()
我希望有一个类,其中initialise()作为构造函数,run()作为我的方法,close()作为我的析构函数。我可以这样做:
import mymodule
with mymodule.MyClass as my_class:
my_class.run()
my_class.run()
这是我目前的一些代码:
static PyMethodDef MyModuleMethods[] =
{
{"initialise", mymodule_initialise, METH_VARARGS, ""},
{"run", mymodule_run, METH_VARARGS, ""},
{"close", mymodule_close, METH_VARARGS, ""},
{NULL, NULL, 0, NULL} /* Sentinel */
};
谢谢,
百里
答案 0 :(得分:1)
查看https://stackoverflow.com/questions/1492755/python-c-binding-library-comparison以了解各种工具的比较,这些工具将帮助您将C ++与Python连接,尤其是在为整个C ++代码库生成绑定时。
另外,请参阅http://wiki.python.org/moin/IntegratingPythonWithOtherLanguages,直接从Python.org获取类似的信息列表
这对您的问题进行了相当大的改动:) with
语句要求将__enter__
和__exit__
作为您的入口和出口点。您是否尝试在C ++类中使用这些方法名称?有关with
声明的详细信息,请参阅http://effbot.org/zone/python-with-statement.htm和http://www.python.org/dev/peps/pep-0343/。
答案 1 :(得分:0)