3 Stimmen

Dynamische Verwendung einer Klassenmethode, die in einem Cython-Erweiterungsmodul definiert ist

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X