Ich habe zwei Dateien: eine run.py und eine constraints.pyx. Ich möchte eine Extension-Klasse ähnlich zu L1Penalty in this code, in constraints.pyx, und instanziieren Sie es in run.py in einer Funktion verwendet werdenImportieren von Cython Extension Class in Python-Datei (Positionsargument
Was ich getan habe.
constraints.pyx eine Erweiterung Klasse enthält, eine Unterklasse der Penalty-Klasse in this code:
from lightning.impl.sag_fast cimport Penalty
cdef class ProbaPenalty(Penalty):
def __cinit__(self):
self.support_lagged = False
...
im Laufe .py Ich erstelle eine Instanz von ProbaPenalty:
import pyximport; pyximport.install()
from constraints import ProbaPenalty
pen = ProbaPenalty()
Der Fehler, die ich habe ist:
cinit() takes exactly 1 positional argument (0 given)
Gibt es einen Flüchtigkeitsfehler? Ich kann ein ähnliches Problem bei Stackoverflow nicht finden. Ich habe versucht, meine CINIT Wechsel in einem bint zu nehmen support_lagged so, dass ich
cdef class ProbaPenalty(Penalty):
def __cinit__(self, bint support_lagged):
self.support_lagged = support_lagged
haben jetzt Und dann
pen = ProbaPenalty(0)
Dieses Mal verwenden, erhalte ich die Fehlermeldung:
AttributeError: 'custom_constraints.ProbaPenalty' object has no attribute 'b'
Wo habe ich b angerufen, und woher kommt b überhaupt?
Am Anfang wollte ich ProbaPenalty einen Vektor von doubles b haben, und ich habe cinit (self, double * b), aber ich habe seitdem den Code geändert, löschte die .c und .so-Dateien usw. Wenn Sie in die aktuelle .c-Datei schauen, gibt es auch kein Attribut b.
Ich habe auch versucht, mit einem Setup.py, mit dem gleichen Problem zu kompilieren.
Basierend auf OPs Kommentar unter der Antwort Ich stimme zu schließen, wie "kann nicht reproduziert werden" – DavidW