我试图在派生类中更改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
。
是否可能有一种在派生类中添加参数的正确方法。