使用Cython

时间:2017-04-30 08:07:37

标签: python cython pyrex

我正在尝试将一些Python代码移植到Cython,结果发现我尝试移植的一些功能需要类方法(在Python代码库中使用@classmethod定义)。

是否可以使用Cython创建Python类方法?如果是,他们会遵循他们在Python中所做的相同范围规则吗?我是否能够访问在类上的实例上定义的cdef方法?

1 个答案:

答案 0 :(得分:2)

它们运行良好,其行为与Python基本相同。

  

我是否能够访问在类上的实例上定义的cdef方法?

我不是100%肯定你的意思,因为类方法不能在类的实例上运行。如果需要,他们可以选择创建一个,在这种情况下cdef方法可以正常工作:

cdef class C:
    cdef m(self):
        pass

    @classmethod
    def c_meth(cls):
        cdef C x = C()
        x.m()

cdef方法仅有效,因为x cdefC,因此它知道类型。如果你刚刚做了

    @classmethod
    def c_meth(cls):
        x = C()
        x.m()

然后你会得到一个属性错误(在运行时),因为Cython编译器不会将xcdef class C链接起来。这是一般规则,与classmethod无关。