Ich möchte die C-Implementierung einer Klassenmethode verwenden (generiert aus Cython ), wenn sie vorhanden ist, oder ihr Python-Äquivalent verwenden, wenn die C-Erweiterung nicht vorhanden ist. Ich habe dies zuerst versucht:
class A(object):
try:
import c_ext
method = c_ext.optimized_method
except ImportError:
def method(self):
return "foo"
Dabei ist optimized_method eine Funktion, die in einer Cython Modul:
def optimized_method(self):
return "fasterfoo"
Aber das funktioniert nicht:
>>> A().method()
exceptions.TypeError: optimized_method() takes exactly one argument (0 given)
Die einzige Möglichkeit, die ich gefunden habe, ist, dass dies funktioniert:
class A(object):
def method(self):
try:
import c_ext
return c_ext.optimized_method(self)
except ImportError:
pass
return "foo"
Aber bei jedem Funktionsaufruf das Vorhandensein des Moduls zu überprüfen, scheint ziemlich suboptimal zu sein... Warum funktioniert mein erster Ansatz nicht?
[edit] : hinzugefügt Cython Inhalt des Moduls