我有一个关于在 Python 端生成的 swig 包装对象和在 C++ 端生成的包装对象的问题。假设我有以下简单的 C++ 类定义
#include <vector>
class Sphere
{
public:
Sphere(){};
};
class Container
{
public:
Container() : data_(0) {};
void add() {
data_.push_back(Sphere());
}
Sphere & get(int i) { return data_[i]; }
std::vector<Sphere> data_;
};
和以下 swig 设置
%module engine
%{
#define SWIG_FILE_WITH_INIT
#include "sphere.h"
%}
// -------------------------------------------------------------------------
// Header files that should be parsed by SWIG
// -------------------------------------------------------------------------
%feature("pythonprepend") Sphere::Sphere() %{
print 'Hello'
%}
%include "sphere.h"
如果我然后在 Python 中执行以下操作
import engine
sphere_0 = engine.Sphere()
container = engine.Container()
container.add()
sphere_1 = container.get(0)
然后包装的 Sphere 类的第一个实例确实调用了Python 包装接口的init方法(打印了“Hello”)。
但是,在 C++ 端生成实例的第二种情况不会(不打印“Hello”)。
由于我的目标是能够在构造对象时为其添加额外的 Python 功能,因此我很高兴听到是否有人对实现这一目标的正确方法有任何指示 - 对于上述两种实例化场景。
最好的祝福,
麦兹