Разделяйте типы расширений в Cython для статической типизации

Я преобразовал класс Python в тип расширения внутри файла .pyx. Я могу создать этот объект в другом модуле Cython, но я не могу делать с ним статическую типизацию .

Вот часть моего класса:

cdef class PatternTree: cdef public PatternTree previous cdef public PatternTree next cdef public PatternTree parent cdef public list children cdef public int type cdef public unicode name cdef public dict attributes cdef public list categories cdef public unicode output def __init__(self, name, parent=None, nodeType=XML): # Some code cpdef int isExpressions(self): # Some code cpdef MatchResult isMatch(self, PatternTree other): # Some code # More functions... 

Я попытался использовать файл .pxd, чтобы объявить его, но он говорит, что «C-метод [некоторая функция] объявлен, но не определен» для всех моих функций. Я также попытался лишить материал C в функциях моей реализации, чтобы заставить его действовать как расширенный класс, но это тоже не сработало.

Вот мой .pxd в его нынешнем виде:

 cdef class PatternTree: cdef public PatternTree previous cdef public PatternTree next cdef public PatternTree parent cdef public list children cdef public int type cdef public unicode name cdef public dict attributes cdef public list categories cdef public unicode output # Functions cpdef int isExpressions(self) cpdef MatchResult isMatch(self, PatternTree other) 

Спасибо за вашу помощь!

Я обнаружил, что это исправление. Вот решение:

В .pyx:

 cdef class PatternTree: # NO ATTRIBUTE DECLARATIONS! def __init__(self, name, parent=None, nodeType=XML): # Some code cpdef int isExpressions(self): # Some code cpdef MatchResult isMatch(self, PatternTree other): # More code 

В .pxd:

 cdef class PatternTree: cdef public PatternTree previous cdef public PatternTree next cdef public PatternTree parent cdef public list children cdef public int type cdef public unicode name cdef public dict attributes cdef public list categories cdef public unicode output # Functions cpdef int isExpressions(self) cpdef MatchResult isMatch(self, PatternTree other) 

В любом Cython модуле (.pyx) я хочу использовать это для:

 cimport pattern_tree from pattern_tree cimport PatternTree 

Последнее предупреждение: Cython не поддерживает относительный импорт . Это означает, что вы должны предоставить весь путь модуля относительно основного файла, из которого вы выполняете.

Надеюсь, это поможет кому-то там.