Cython共享扩展类型:类

2024-10-05 10:35:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Cython中创建一个在Python中可读的类。目前,我的代码看起来像下面的代码(当然它们不完全相同,但是代码的结构和组织是相同的)。在

据我所知,我们不能直接从Python调用Cython对象,所以我打算让TEST类作为包装器工作,它可以调用更快的Cython类。
但是,我发现.pyx中的类对象不能调用同一文件中cythoized类中的cdef函数,因此cdef class CYTEST有另一个包装函数{},这对我来说效率很低。 (我最初问题中的这一段被证明是错误的)

我发现我们可以在一个.pxd文件中声明对象(例如intlist,和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

^{pr2}$

cyobj.pxd

^{3}$

Official document没有我的例子。在


Tags: 文件对象函数代码testselfcythonclass
1条回答
网友
1楼 · 发布于 2024-10-05 10:35:30
self.main.cyobj2.Cyfunc(num+1) # what I want to do

问题是它不知道self.main.cyobj2CYTEST,因此无法调用{}。在

最简单的选择是将其铸造:

^{pr2}$

(如果转换失败,您将得到一个TypeError)。在

第二个选择是使Cyfunc成为cpdef函数,这样就可以在不知道正常Python方式的类型的情况下调用它。在

第三种选择可能是使MAINA cdef class,然后指定cyobj1和{}的类型,以及CYTEST.main。但是,这可能会导致循环依赖的问题,所以我不完全确定这是可能的。在

相关问题 更多 >

    热门问题