无法使用SWIG实例化Python中的C ++类(获取属性错误)

时间:2018-10-22 13:39:56

标签: python c++ swig

我想将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()

1 个答案:

答案 0 :(得分:0)

SWIG生成minimal_wrap.cxxminimal.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源文件包含高级支持代码。这是您将导入以使用该模块的文件。