我正在使用 Swig 3.0.7 创建 Python 2.7 可调用版本的 C 函数,这些函数以这种方式定义常量:
#define MYCONST 5.0
在 swig 的早期版本中,Python 可以透明地使用这些内容:
import mymodule
x = 3. * mymodule.MYCONST
但是现在这会生成一条消息
AttributeError: 'module' object has no attribute 'MYCONST'
“mymodule”中使用常量内部的函数按预期工作。
有趣的是,如果我在 Swig 指令文件 mymodule.i 中包含这一行,
#define MYCONST 5.0
然后执行 dir(mymodule) 返回一个包含的列表
['MYCONST_swigconstant', 'SWIG_PyInstanceMethodNew', (etc.) .... ]
输入Python解释器
mymodule.MYCONST_swigconstant
给出
<built-in function MYCONST_swigconstant>
没有提供明显的方法来获取该值。
所以我的问题是,能否使之前的语法起作用,以便 mymodule.MYCONST
正确评估
如果不行,有解决办法吗?
最佳答案
定义不会通过 cvar
导出到 SWIG。您可以执行以下操作
#define MYCONST 5.0
const float gMYCONST = MYCONST;
通过这种方式,您可以将类型信息添加到常量中,并且可以通过以下方式访问它
import mymodule
mymodule.cvar.gMYCONST
我有 SWIG 3.0.2,使用这个版本,可以使用 mymodule.MYCONST
访问定义,但由于其他原因,我通常将宏定义转换为类型化定义。
关于python - SWIG/python - C 中定义的常量不可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40634826/