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内でフィットをインスタンス化すると、すべて期待どおりに機能します。これは、モジュールレベルのオブジェクトを定義して、同じモジュール内の関数で再利用できないことを意味しますか?

私の元のコードでは、my_funcがループで繰り返し呼び出され、BClassのインスタンス化には、いくつかの配列を割り当てるためにオーバーヘッドがあります。そのため、my_funcの外部でフィットをインスタンス化する必要があります。これを行う方法について何か考えはありますか?

4

1 に答える 1

0

さて、解決策は恥ずかしいほど簡単です。適合を宣言するだけです

cdef BClass fit = BClass()

モジュールレベルでエラーなしで動作します。

fit がPythonの方法でインスタンス化されている場合、なぜ私はまだ理解していません

fit = BClass()

次に、この AttributeError を取得し、 my_func() 内で Python の方法でインスタンス化すると、エラーなしで動作するのはなぜですか?

于 2012-10-24T09:25:53.807 に答える