我在myenum.h中的C中有一个简单的枚举:
enum MyEnum {
ONE,
TWO,
THREE
};
问题在于,当我将其映射到Python时,我只能通过模块名称访问枚举,而不是通过MyEnum。因此值ONE,TWO,THREE包含在我定义的任何其他函数中,而不是包含在MyEnum中。
我的api.i文件是:
%module api
%{
#include "myenum.h"
%}
%include "myenum.h"
我用SWIG生成
swig -builtin -python api.i
并将其导入Python
import _api
现在我必须使用_api模块中的枚举值:
_api.ONE
_api.TWO
_api.THREE
虽然我想像
那样使用它们_api.MyEnum.ONE
_api.MyEnum.TWO
_api.MyEnum.THREE
有谁知道我怎么能做到这一点?
答案 0 :(得分:1)
有一个SWIG功能nspace可能会让你想要,但遗憾的是它还不支持Python。我总是必须在结构中定义枚举,以便在SWIG中以您想要的方式显示它。例如:
%module tmp
%inline %{
struct MyEnum {
enum { A,B,C };
};
%}
结果:
>>> import tmp
>>> tmp.MyEnum.A
0
>>> tmp.MyEnum.B
1
>>> tmp.MyEnum.C
2
答案 1 :(得分:1)
您需要了解的是,在C中,枚举中的这些名称不是像Python中那样命名空间。你应该在继续之前阅读一些关于enums can be used的内容。
现在请注意,由于这些是全局可访问的名称,因此它们不会在Python中进行命名空间。你最好的选择是按照以下方式创建一个对象:
class MyEnum:
A = A
B = B
C = C
del(A, B, C)
然后只能通过_api.MyEnum.A
等访问A,B,C,并且无法直接访问A,B,C。