Метод __getitem__ с аргументом кортежа с использованием Python C-API

Можно ли определить класс с __getitem__, который принимает аргумент tuple, используя Python C-API? Член sq_item члена tp_as_sequence члена PyTypeObject должен быть ssizeargfunc, поэтому я не понимаю, как это сделать. (Но я предполагаю, что NumPy ndarray делает это.)


person Johan Råde    schedule 14.04.2012    source источник


Ответы (1)


Да, используйте вместо этого tp_as_mapping.

Его mp_subscript принимает PyObject *, поэтому вы можете использовать что угодно в качестве индекса/ключа.

Чтобы понять, как они связаны, вы можете взглянуть на источник PyObject_GetItem(), который (как говорится в документе) является эквивалентом выражения Python o[key]. Вы увидите, что он сначала пытается tp_as_mapping, а если его нет и ключ int, он пытается tp_as_sequence.

person yak    schedule 14.04.2012