我有兩個文件:一個run.py和一個constraints.pyx。我想創建一個類似於this code中的L1Penalty的擴展類,在constraints.pyx中實例化它run.py在函數中使用將python擴展類導入到python文件中(位置參數
我做了什麼:
constraints.pyx包含一個擴展類,處罰類的this code子類:
from lightning.impl.sag_fast cimport Penalty
cdef class ProbaPenalty(Penalty):
def __cinit__(self):
self.support_lagged = False
...
在運行.py我創建了ProbaPenalty的實例:
import pyximport; pyximport.install()
from constraints import ProbaPenalty
pen = ProbaPenalty()
的錯誤,我有是:
cinit() takes exactly 1 positional argument (0 given)
是否有紕漏?我無法在stackoverflow上找到類似的問題。 我試圖改變我的CINIT採取在賓特support_lagged這樣的,我現在有
cdef class ProbaPenalty(Penalty):
def __cinit__(self, bint support_lagged):
self.support_lagged = support_lagged
,然後使用
pen = ProbaPenalty(0)
這一次,我得到的錯誤:
AttributeError: 'custom_constraints.ProbaPenalty' object has no attribute 'b'
在哪裏我打電話給b嗎?b甚至從哪裏來?
在開始時,我想讓ProbaPenalty具有雙b的向量,並且我做了cinit(self,double * b),但是我已經改變了代碼,刪除了.c和.so文件等。 ,查看當前的.c文件,也沒有屬性b。
我也嘗試編譯與setup.py,同樣的問題。
基於OP評論下的答案我投票結束爲「不能再轉載」 – DavidW