无法使用 SWIG 在 Python 中实例化C++类(获取属性错误)
Cannot instantiate a C++ class in Python using SWIG (Gets Attribute error)
我想将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()
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 运行 SWIG。 报价:
。[运行 swig -c++ -python]这将创建两个不同的文件;一个 C/C++ 源文件 example_wrap.c 或 example_wrap.cxx 和一个 Python 源文件 example.py。生成的 C 源文件包含需要编译并与 C/C++ 应用程序的其余部分链接以创建扩展模块的低级包装器。Python 源文件包含高级支持代码。这是您将导入以使用该模块的文件。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 具有默认值的引用获取函数
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 在c++中获取大文件的大小