Супер конструктор в классах cdef - PullRequest
0 голосов
/ 11 января 2019

Я работаю над упаковкой библиотеки C с использованием Cython. Я хотел бы использовать cdef class, чтобы обернуть простую структуру. Структура требует, чтобы некоторые параметры были правильно инициализированы. Я поместил соответствующий код в метод __cinit__ следующим образом:

cdef class Func:
    cdef library.Func* func

def __cinit__(self, int value):
    library.init_func(&self.func, value)

В коде Python я могу создать объект функции через f = Func(17). Затем код прекрасно обрабатывает инициализацию. У меня следующий вопрос: скажем, я хочу расширить класс Func в python (class MyFunc(Func): ...). Как добавить конструктор в MyFunc?

Я хотел бы написать конструктор с другими параметрами, который вызывает __cinit__(self, int value) со значением, полученным из параметров конструктора. Но не представляется возможным (вероятно, по уважительной причине) вызвать __cinit__ из кода Python.

Есть ли способ включить конструкторы в подклассы, или я должен создать оболочку для функции и делегировать методы / свойства?

...