cython模块级对象

时间:2012-10-22 14:11:27

标签: cython

我的代码中有以下结构:

#test.pyx
cdef class BClass:
    cdef str x
    cdef set_args(self, x):
        self.x = x

    cdef func(self, x):  
        print "BClass" , self.x, "--", x


fit = BClass()

def my_func():
    global fit
    fit.set_args("hello")
    fit.func("world")


#tester.py
import test
test.my_func()

我将pyx构建到pyd没有问题,但是当我运行tester.py时出现以下错误:

AttributeError:'test.BClass'对象没有属性'set_args'

如果我在my_func中实例化fit,则所有工作都按预期工作。这是否意味着我无法定义模块级对象,然后在同一模块中的函数中重用它?

在我的原始代码中,在循环中重复调用my_func并且由于分配了一些数组而实例化BClass会产生一些开销,这就是我想在my_func之外实例化的原因。有什么想法怎么做?

1 个答案:

答案 0 :(得分:0)

嗯,解决方案很简单。只是声明合适

cdef BClass fit = BClass()

在模块级别使其工作没有任何错误。

我仍然不明白为什么如果使用

将Python方式实例化为fit
fit = BClass()

然后我得到这个AttributeError,为什么如果我在my_func()内部以Python方式实例化它,它的工作没有错误???