2

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

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

4

1 回答 1

5

它们工作正常并且行为方式与 Python 基本相同。

我可以访问在类的实例上定义的 cdef 方法吗?

我不是 100% 确定你的意思,因为类方法不对类的实例进行操作。他们可以根据需要选择创建一个,在这种情况下cdef方法可以正常工作:

cdef class C:
    cdef m(self):
        pass

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

cdef方法之所以有效,是因为它xcdef编辑了,C所以它知道类型。如果你刚刚

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

那么你会得到一个属性错误(在运行时),因为 Cython 编译器不会xcdef class C. 这是一般规则,与它是classmethod.

于 2017-04-30T08:48:08.167 回答