使用MyClass扩展Python

时间:2012-03-21 20:55:29

标签: python

我已经阅读了有关如何使用我自己的模块扩展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 */
};

谢谢,

百里

2 个答案:

答案 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.htmhttp://www.python.org/dev/peps/pep-0343/

答案 1 :(得分:0)