来自其他扩展的 Cython 类前向声明​​

时间:2021-05-08 19:56:25

标签: cython cythonize

我正在尝试从另一个扩展中转发声明一个类。本质上,我有一个文件 src/myClass/myClass.pxd(和一个关联的 .pyx 文件),其中包含 cdef class myClass 的定义。现在在另一个文件 src/myClass/myHelper.pxd(带有关联的 .pyx 文件)中,我想转发声明 myClass 类型,以便我可以在 myClass 中有一个 cdef class myHelper 类型的字段.我需要将它向前声明,不能简单地 cimport 它,因为 myClass 指回 myHelper。问题是,当我转发声明 myClasscdef class myClass 时,cythonize 抱怨该类没有定义,即使它只是在另一个地方。有没有办法解决这个问题?

我不确定 cythonize 如何在内部处理这个问题,但如果类字段是指针,应该没问题。

src/myClass/myClass.pxd:

from src.myClass.myHelper cimport myHelper

cdef class myClass:
    cdef:
        myHelper helper

    # other definitions...

src/myClass/myHelper.pxd:

cdef class myClass

cdef class myHelper:
    cdef:
        myClass helper

    # other definitions, not using the actual structure of myClass

1 个答案:

答案 0 :(得分:2)

我认为您根本不需要转发声明它。我可以得到一个使用循环 cimport 的简单示例:

df = df[["A", "Aratio", "B", "Bratio", "C", "Cratio", "total"]]
# A.pxd
from B cimport B

cdef class A:
    cdef B binst
# B.pxd
from A cimport A

cdef class B:
    cdef A ainst
# A.pyx
cdef class A:
    pass

这对我来说编译和导入很好。我认为前向声明造成的混乱比解决的要多。

相关问题