我想在Cython中创建一个在Python中可读的类。目前,我的代码看起来像下面的代码(当然它们不完全相同,但是代码的结构和组织是相同的)。在
据我所知,我们不能直接从Python调用Cython对象,所以我打算让TEST
类作为包装器工作,它可以调用更快的Cython类。
但是,我发现(我最初问题中的这一段被证明是错误的).pyx
中的类对象不能调用同一文件中cythoized类中的cdef
函数,因此cdef class CYTEST
有另一个包装函数{
我发现我们可以在一个.pxd
文件中声明对象(例如int
,list
,和object
),并且我们可以从.pyx
文件中定义的Python类(在下面的示例中,print(self.cytest.somenum)
)中读取Cython类中的对象。在
我们能在Cythonized class上做同样的事情吗?在这个例子中,我们可以直接调用TEST
类中的Cyfunc()
?
main.py
的一部分:
class MAIN:
def __init__(self):
cyobj1 = cyobj.CYTEST(self)
cyobj2 = cyobj.CYTEST(self)
cyobj1.func(3)
在cyobj.pyx
cyobj.pxd
:
Official document没有我的例子。在
问题是它不知道}。在
self.main.cyobj2
是CYTEST
,因此无法调用{最简单的选择是将其铸造:
^{pr2}$(如果转换失败,您将得到一个
TypeError
)。在第二个选择是使
Cyfunc
成为cpdef
函数,这样就可以在不知道正常Python方式的类型的情况下调用它。在第三种选择可能是使}的类型,以及
MAIN
Acdef class
,然后指定cyobj1
和{CYTEST.main
。但是,这可能会导致循环依赖的问题,所以我不完全确定这是可能的。在相关问题 更多 >
编程相关推荐