クラス メソッドの C 実装 ( Cythonから生成されたもの) が存在する場合はそれを使用し、C 拡張機能が存在しない場合は Python の同等物を使用したいと考えています。私は最初にこれを試しました:
class A(object):
try:
import c_ext
method = c_ext.optimized_method
except ImportError:
def method(self):
return "foo"
ここで、optimized_method はCythonモジュールで定義された関数です。
def optimized_method(self):
return "fasterfoo"
しかし、これはうまくいきません:
>>> A().method()
exceptions.TypeError: optimized_method() takes exactly one argument (0 given)
これを機能させるために私が見つけた唯一の方法は次のとおりです。
class A(object):
def method(self):
try:
import c_ext
return c_ext.optimized_method(self)
except ImportError:
pass
return "foo"
しかし、各関数呼び出しでモジュールの存在をチェックするのは、最適とは言えないようです...なぜ私の最初のアプローチが機能しないのですか?
[編集] : Cythonモジュールの内容を追加