我想将C ++类导出到Python,为此我使用SWIG创建了C ++扩展模块。从文档中,我可以看到可以使用SWIG导出类。我能够为python成功创建类模块(_minimal.pyd)。我可以用Python导入模块。但是,我无法创建该类的对象,并且出现属性错误。请找到我尝试过的代码示例。谁能帮我吗?
//minimal.h
class minimal
{
private:
static int num_instances;
public:
minimal()
{
++num_instances;
}
~minimal()
{
--num_instances;
}
void print_num_instances();
};
//minimal.cpp
#include <iostream>
#include "minimal.h"
int minimal::num_instances = 0;
void minimal::print_num_instances()
{
using namespace std;
cout << this->num_instances << endl;
}
//minimal.i(interface file)
%module minimal
%{
#include "minimal.h"
%}
%include "minimal.h"
//python code used to run the module
import _minimal as m
m1=m.minimal()
答案 0 :(得分:0)
SWIG生成minimal_wrap.cxx
和minimal.py
。将.cxx文件构建到_minimal.pyd
中时,然后import minimal
,而不是import _minimal
。
>>> import minimal
>>> x=minimal.minimal()
>>> x.print_num_instances()
1
>>> y=minimal.minimal()
>>> x.print_num_instances()
2
有关参考,请参见SWIG Python文档中的36.2.1 Running SWIG。引用:
... [正在运行swig -c ++ -python]这将创建两个不同的文件。 C / C ++源文件example_wrap.c或example_wrap.cxx和Python源文件example.py。生成的C源文件包含需要编译的低级包装,并与您的C / C ++应用程序的其余部分链接以创建扩展模块。 Python源文件包含高级支持代码。这是您将导入以使用该模块的文件。