将cython扩展类导入python文件(位置参数

将cython扩展类导入python文件(位置参数,python,cython,Python,Cython,我有两个文件:run.py和constraints.pyx。我想在constraints.pyx中创建一个类似于l1paulin的扩展类,并在run.py中实例化它以在函数中使用 我所做的: constraints.pyx包含一个扩展类,它是惩罚类的一个子类,位于: 在run.py中,我创建了一个实例: import pyximport; pyximport.install() from constraints import ProbaPenalty pen = ProbaPenalty()

我有两个文件:run.py和constraints.pyx。我想在constraints.pyx中创建一个类似于l1paulin的扩展类,并在run.py中实例化它以在函数中使用

我所做的:

constraints.pyx包含一个扩展类,它是惩罚类的一个子类,位于:

在run.py中,我创建了一个实例:

import pyximport; pyximport.install()
from constraints import ProbaPenalty
pen = ProbaPenalty()
我的错误是:

cinit()正好接受1个位置参数(给定0)

有没有粗心的错误?我在stackoverflow上找不到类似的问题。 我试着改变我的cinit,以接受一个bint支持的滞后,现在我有了

cdef class ProbaPenalty(Penalty):
    def __cinit__(self, bint support_lagged):
        self.support_lagged = support_lagged
然后使用

pen = ProbaPenalty(0)
这一次,我得到了一个错误:

AttributeError:“自定义约束。Proba罚则”对象没有属性“b”

我在哪里叫b,b从哪里来

一开始,我希望有一个双倍b的向量,我做了cinit(self,double*b),但后来我更改了代码,删除了.c和.so文件,等等,查看当前的.c文件,也没有属性b


我也尝试过使用setup.py进行编译,但遇到了同样的问题。

\uuCinit\uuu
方法不适合Python级别访问扩展类型,请参阅


定义一个正则的
\uuuuu init\uuuu
用于Python。

方法不适合Python级别访问扩展类型,请参阅


定义一个正则的
\uuuuu init\uuuuuu
从Python中使用。

在关闭并重新打开spyder之后,我实际上尝试了今天早上再次运行的东西-它甚至可以与cinit一起工作。在任何情况下,它都无法解释为什么会有属性b。我想,在重新运行setup.py.I a时,不知何故保存的变量没有被清除事实上,在关闭并重新打开spyder之后,我今天早上再次尝试运行我所拥有的功能-它甚至可以与cinit一起工作。无论如何,它都无法解释为什么会有属性b。我猜在我重新运行setup.py时,有些保存的变量没有被清除。根据答案下的OPs注释,我投票关闭它“无法再复制”基于OPs的评论,答案是“无法再复制”
pen = ProbaPenalty(0)