Я бы хотел, чтобы мои объекты расширения передавались в функцию Python len()
, и я понимаю, что способ сделать это - реализовать sq_length
член PySequenceMethods
, но сейчас я не могуесть время, чтобы реализовать все методы протокола последовательности, и я не могу понять, какие из методов являются необязательными, а какие (если таковые имеются) требуются.
В документации для tp_as_sequence
ничего не говорится о необязательных членах.
В документации для PySequenceMethods
прямо указано, что sq_item
, sq_ass_item
, sq_contains
, sq_inplace_concat
и sq_inplace_repeat
можно оставить равными NULL
.
Кроме того, документация для sq_item
подразумевает, что sq_length
также можно оставить равным NULL
:
Если sq_length
равно NULL , индекс передается как [...]
, который оставляет sq_concat
и sq_repeat
,Я был бы удивлен, если бы не было безопасно также установить их на NULL
, учитывая, что вы можете сделать это для всех остальных членов (включая sq_item
и sq_length
, оба из которых кажутся более фундаментальными дляконцепция последовательности, чем другие), но действительно ли это предположение правильно?
Если это не безопасно оставить их NULL
, безопасно ли реализовать их просто, чтобы установить ошибкузаявляя, что эти две функции не поддерживаются и возвращают NULL
?