2016-11-16 53 views
1

我使用痛饮3.0.7创建蟒以这种方式定义常量C函数2.7版本的调用:痛饮/ Python的 - 在C中定义的常量不可访问

#define MYCONST 5.0 

在痛饮的先前版本这些将提供给蟒蛇透明:

import mymodule 

x = 3. * mymodule.MYCONST 

但现在这会产生一个消息

AttributeError: 'module' object has no attribute 'MYCONST' 

使用常量的'mymodule'中的函数内部按预期工作。

有趣的是,如果我有这条线在痛饮指令文件mymodule.i,

#define MYCONST 5.0 

然后做目录(mymodule中)返回包含

['MYCONST_swigconstant', 'SWIG_PyInstanceMethodNew', (etc.) .... ] 

打字Python解释器列表

mymodule.MYCONST_swigconstant 

<built-in function MYCONST_swigconstant> 

它没有提供明显的方法来获得价值。

所以我的问题是,一个可以使以前的语法的工作,让mymodule.MYCONST评估正确

如果没有,有没有解决办法?

回答

1

定义不会通过cvar导出到SWIG。你可以做以下

#define MYCONST 5.0 
const float gMYCONST = MYCONST; 

这样,你添加类型信息的常数,它可以通过

import mymodule 
mymodule.cvar.gMYCONST 

访问我痛饮3.0.2,并使用这个版本中,可以定义可以使用mymodule.MYCONST访问,但由于其他原因,我通常将宏定义转换为类型化定义。

1

我无法重现您的问题。如果下面的演示没有帮助,发布您的构建过程:

test.i:

%module test 
%inline %{ 
#define MYCONST 5.0 
%} 

痛饮3.0.8,并与VS2012编译成一个C扩展:

swig -python test.i 
cl /MD /LD /Fe_test.pyd /Ic:\python33\include test_wrap.c -link /libpath:c:\python33\libs 

使用:

Python 3.3.5 (v3.3.5:62cf4e77f785, Mar 9 2014, 10:35:05) [MSC v.1600 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import test 
>>> test.MYCONST 
5.0