我有两个文件:一个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