python - SWIG/python - C 中定义的常量不可访问

标签 python swig

我正在使用 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/

相关文章:

Python 输入函数

python - Pandas 出现在很多专栏上

python - SWIG C++/Python:如何处理抽象类的shared_ptr的std::map

java - SWIG 结构成员被 Java 的垃圾收集器过早释放

c++ - 如何使用 SWIG 为 Numpy 的 Matrix 类创建包装器?

c++ - Swig C++ Lua 通过引用传递类

python - 如何在 Python 2.7 中创建 Lambda 函数来创建、重新启动、删除、修改 ElastiCache Redis?

用于列表列表的 Python 函数

python - 在所有 Pandas DataFrame 列和过滤器中搜索字符串

python - SWIG、Python 和指针