如果存在,我想使用类方法的 C 实现(从Cython生成),或者如果不存在 C 扩展,则使用其 Python 等效项。我首先尝试了这个:
class A(object):
try:
import c_ext
method = c_ext.optimized_method
except ImportError:
def method(self):
return "foo"
其中 optimize_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模块的内容