3
クラスメソッドのC実装(存在する場合はCythonから生成)を使用するか、C拡張がない場合はPythonの同等のものを使用します。私が最初にこれを試してみました:Cython拡張モジュールで定義されているクラスメソッドを動的に使用
optimized_methodは Cythonモジュールで定義された関数であるclass A(object):
try:
import c_ext
method = c_ext.optimized_method
except ImportError:
def method(self):
return "foo"
:
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"
しかし、各関数呼び出しでモジュールが存在するかどうかをチェックすることは、あまりにも最適ではないようです...なぜ私の最初のアプローチは機能しませんか?
[編集]:
は、私はあなたがc_ext.optimized_methodは、明瞭化のために定義されたかを示すことをお勧めしたい:
ソリューションは、明示的にバインドされたメソッドを宣言することです – Moe