gpt4 book ai didi

python - 向 Python Swig 模板类添加新方法

转载 作者:太空狗 更新时间:2023-10-30 00:46:27 24 4
gpt4 key购买 nike

我需要向我的 swig 模板类添加一个新方法,例如:

我在 myswig.i 中声明了一个模板类,如下所示:

%template(DoubleVector) vector<double>;

这将在生成的 .py 文件中生成一个名为“DoubleVector”的类,其中包含一些生成的方法。假设它们是 func1()、func2() 和 func3()。这些是生成的函数,我无法控制它们。现在,如果我想向这个类(DoubleVector)添加一个名为“func4()”的新方法,我该怎么做呢?是否可以?

我知道一个名为 %pythoncode 的标识符,但我无法使用它在此模板类中定义新函数。

最佳答案

给定一个接口(interface)文件,如:

%module test

%{
#include <vector>
%}

%include "std_vector.i"
%template(DoubleVector) std::vector<double>;

DoubleVector 添加更多功能的最简单方法是使用 C++ 在 SWIG 接口(interface)文件中使用 %extend 编写它:

%extend std::vector<double> {
void bar() {
// don't for get to #include <iostream> where you include vector:
std::cout << "Hello from bar" << std::endl;
}
}

这样做的好处是它适用于您使用 SWIG 定位的任何语言,而不仅仅是 Python。

您也可以使用 %pythoncodeunbound function 来实现:

%pythoncode %{
def foo (self):
print "Hello from foo"

DoubleVector.foo = foo
%}

运行此示例:

Python 2.6.7 (r267:88850, Aug 11 2011, 12:16:10) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> d = test.DoubleVector()
>>> d.foo()
Hello from foo
>>> d.bar()
Hello from bar
>>>

关于python - 向 Python Swig 模板类添加新方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8837135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com