3
是否可以使用Python C-API定义带__getitem__
的类,该参数需要使用tuple
参数? tp_as_sequence
成员PyTypeObject
的成员必须是ssizeargfunc
,所以我不知道该怎么做。 (但我假设NumPy ndarray
这样做。)带有使用Python的元组参数的__getitem__方法C-API
是否可以使用Python C-API定义带__getitem__
的类,该参数需要使用tuple
参数? tp_as_sequence
成员PyTypeObject
的成员必须是ssizeargfunc
,所以我不知道该怎么做。 (但我假设NumPy ndarray
这样做。)带有使用Python的元组参数的__getitem__方法C-API
是的,请使用tp_as_mapping
来代替。
它的mp_subscript
需要PyObject *
,所以你可以使用任何东西作为索引/键。
为了理解它们之间的关系,你可以看一下PyObject_GetItem()
的来源,其中(如文档所述)等效于Python o[key]
表达式。你会看到它首先尝试tp_as_mapping
,如果那不是,那么键是int
,它会尝试tp_as_sequence
。