我的代码中有以下结构:
#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之外实例化的原因。有什么想法怎么做?
答案 0 :(得分:0)
嗯,解决方案很简单。只是声明合适
cdef BClass fit = BClass()
在模块级别使其工作没有任何错误。
我仍然不明白为什么如果使用
将Python方式实例化为fitfit = BClass()
然后我得到这个AttributeError,为什么如果我在my_func()内部以Python方式实例化它,它的工作没有错误???