Санизировать кусочек питона?

Я использую Python / ctypes для обертывания библиотеки C. Одна из структур, которые я обертываю, напоминает числовой вектор, и я хотел бы, чтобы метод getitem () соответствующего класса Python поддерживал срезы. На C-уровне у меня есть функция, соответствующая срезу:

void * slice_copy( void * ptr , int index1 , int index2 , int step) { ... } 

Мой Python getitem () выглядит так:

 def __getitem__(self , index): if isinstance( index , types.SliceType): # Call slice_copy function ... # Need values for arguments index1, index2 and step. elif isinstance( index , types.IntType): # Normal index lookup else: Raise TypeError("Index:%s has wrong type" % index) 

Если литерал среза выглядит как [1: 100: 10], все свойства старта, конца и шага объекта среза установлены, но, например, в случае [-100:] свойство start будет равно -100, и как конец, так и конец свойства шага будут None, то есть они должны быть дезинфицированы, прежде чем я могу передать целочисленные значения функции C slice_copy (). Теперь эта санировка не очень сложна, но я бы подумал, что необходимая функциональность уже включена в источник Python – или?

В интерфейсе действительно есть функция. Объекты slice имеют метод indices() который принимает длину последовательности в качестве параметра и возвращает нормированные значения начала, остановки и шага в качестве кортежа.