2014-04-26 5 views
0

파생 클래스에서 cpdef 메서드의 메서드 서명을 변경하려고하지만 오류가 계속 발생합니다. *의 .pxd에서파생 된 cython 클래스의 cpdef func 정의에 매개 변수 추가

:에서

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 

이 오류는하지 않는 것을 struct가 int 또는 더 간단한 데이터 유형으로 정의 된 경우 발생합니다. 즉, int ftHandle을 수행하면 오류가 발생하지 않습니다.

기본 클래스이므로 cheese을 찾을 수없는 파생 클래스의 do_something 메서드에서 혼란스러워하는 것 같습니다.

매개 변수를 파생 클래스에 추가하는 올바른 방법이있을 수 있습니다.

+0

Cython이 .pxd 파일을 제대로 읽었습니까? 'FT_DEVICE_LIST_INFO_NODE_OS'는 어디에 정의되어 있습니까? 적당한 .h와 .pxd를 정의하면 그것이 나에게 효과적이다. (할당 전에 ''bla.pyx : 10 : 26 : 지역 변수'node '가 참조된다.) – hivert

+0

네, 구조체는 이것을위한 특정 타입을 가질 필요가있다. 일어날 것입니다. cython으로 직접 정의하더라도 일어납니다. 내 편집을 참조하십시오. – Matt

+0

그리고 물어보기 전에, 저는 libc.stdint cimport uint64_t' 에서요 :) – Matt

답변

0

밝혀진 버그는 this으로 나타났습니다. here을 참조하십시오.

관련 문제