2010-10-04 7 views
6

Следуя приведенному здесь примеру, «Augementing .pxd», я пытаюсь использовать файлы «.pxd», чтобы увеличить чистый файл python. (Добавьте определения типов, внешние к файлу чистого python).Использование файлов cython .pxd для файлов чистого питона Augment

питон файл:

class A(object): 
    def foo(self, i=3, x=None): 
     print "Big" if i > 1000 else "Small" 

PXD файл:

cdef class A: 
    cpdef foo(self, int i, x) 

У меня есть словарь, который я по умолчанию это "None" в питона. К сожалению, cython это не нравится.

Если я использую мой «чистый» файл питон, без объявления типа или объявить тип как «Словарь» в файле PXD я получаю ошибку:

"Signature not compatible with previous declaration"

я заметил, что он будет собирать, если я НЕ указывайте значение по умолчанию, но есть причина для объявления значений по умолчанию.

Есть ли способ, которым это может быть обработано?

ответ

13

Дополнительные аргументы в функциях cpdef объявляются иначе, чем функции cdef, которые по существу аналогичны функциям python.

Ваш файл .pxd должен быть изменен, чтобы записать в виде

cdef class A: 
    cpdef foo(self, int i=*, x=*) 
+0

Спасибо теперь я получил эту работу. Следующая проблема заключается в определении метода __init__ в файле pxd ... – monkut