是否可以使用Python C-API定义一个带有__getitem__
参数的tuple
的类?
sq_item
成员的tp_as_sequence
成员PyTypeObject
成员
必须是ssizeargfunc
,所以我不知道该怎么做。
(但我假设NumPy ndarray
做到了。)
答案 0 :(得分:4)
是的,请改用tp_as_mapping
。
其mp_subscript
需要PyObject *
,因此您可以将任何内容用作索引/键。
要了解它们之间的关系,您可以查看PyObject_GetItem()
的来源(正如文档所述)与Python o[key]
表达式相当。您会看到它首先尝试tp_as_mapping
,如果不存在且密钥为int
,则会尝试tp_as_sequence
。