在派生的cython类中向cpdef func定义添加参数

时间:2014-04-26 02:37:22

标签: python cython

我试图在派生类中更改cpdef方法的方法签名,但不断收到错误。

在* .pxd:

from libc.stdint cimport uint64_t

cdef struct _ft_device_list_info_node_os:
        uint64_t ftHandle
ctypedef _ft_device_list_info_node_os FT_DEVICE_LIST_INFO_NODE_OS

cdef class BaseClass(object):
    cpdef object do_something(BaseClass self)

cdef class DerivedClass(BaseClass):
    cdef FT_DEVICE_LIST_INFO_NODE_OS cheese

在* .pyx中:

cdef class BaseClass(object):

    cpdef object do_something(BaseClass self):
        pass

cdef class DerivedClass(BaseClass):

    cpdef object do_something(DerivedClass self, int val=10):
        cdef FT_DEVICE_LIST_INFO_NODE_OS node
        self.cheese = node

编译时出现以下错误:

cythoning test.pyx to pybarst\test.cpp

Error compiling Cython file:
------------------------------------------------------------
...

cdef class DerivedClass(BaseClass):

    cpdef object do_something(DerivedClass self, int val=10):
        cdef FT_DEVICE_LIST_INFO_NODE_OS node
        self.cheese = node
                         ^
------------------------------------------------------------

test.pyx:10:26: Cannot convert 'FT_DEVICE_LIST_INFO_NODE_OS' to Python object

如果仅使用整数或更简单的数据类型定义结构,则似乎不会发生此错误,即如果int ftHandle错误未发生。

它似乎在派生类的do_something方法中混淆了,它认为它是基类,因此无法找到cheese

是否可能有一种在派生类中添加参数的正确方法。

1 个答案:

答案 0 :(得分:0)

原来这是他们用this修复的错误。请参阅here