0

我的代码中有以下结构:

#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 之外实例化 fit 的原因。任何想法如何做到这一点?

4

1 回答 1

0

好吧,解决方案非常简单。只是宣布适合

cdef BClass fit = BClass()

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

我仍然不明白为什么如果 fit 是用 Python 方式实例化的

fit = BClass()

然后我得到这个 AttributeError ,为什么如果我在 my_func() 中以 Python 方式实例化它,它可以正常工作???

于 2012-10-24T09:25:53.807 回答