Cython class 来自其他扩展的前向声明
Cython class forward declaration from other extension
我正在尝试从另一个扩展转发声明一个 class。本质上,我有一个文件 src/myClass/myClass.pxd
(和一个关联的 .pyx 文件),其中包含 cdef class myClass
的定义。现在在另一个文件 src/myClass/myHelper.pxd
(与关联的 .pyx 文件)中,我想转发声明 myClass
类型,以便我可以在 cdef class myHelper
中有一个 myClass
类型的字段.我需要它被前向声明,不能简单地 cimport
因为 myClass
指回 myHelper
。问题是当我将 myClass
转发声明为 cdef class myClass
时,cythonize
抱怨 class 没有定义,即使它只是在另一个地方。有解决办法吗?
我不确定 cythonize
如何在内部处理这个问题,但如果 class 字段是指针,应该没问题。
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
我认为您根本不需要转发声明它。我可以获得一个使用循环导入的简单示例:
# 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
cdef class B:
pass
这对我来说编译和导入都很好。我认为前向声明造成的混乱比解决的更多。
我正在尝试从另一个扩展转发声明一个 class。本质上,我有一个文件 src/myClass/myClass.pxd
(和一个关联的 .pyx 文件),其中包含 cdef class myClass
的定义。现在在另一个文件 src/myClass/myHelper.pxd
(与关联的 .pyx 文件)中,我想转发声明 myClass
类型,以便我可以在 cdef class myHelper
中有一个 myClass
类型的字段.我需要它被前向声明,不能简单地 cimport
因为 myClass
指回 myHelper
。问题是当我将 myClass
转发声明为 cdef class myClass
时,cythonize
抱怨 class 没有定义,即使它只是在另一个地方。有解决办法吗?
我不确定 cythonize
如何在内部处理这个问题,但如果 class 字段是指针,应该没问题。
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
我认为您根本不需要转发声明它。我可以获得一个使用循环导入的简单示例:
# 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
cdef class B:
pass
这对我来说编译和导入都很好。我认为前向声明造成的混乱比解决的更多。