我在C++中实现了Python 2.7模块。我需要定义一个支持这些操作的类(我们称之为Attr
):
a = Attr()
# some code ...
x = a[7] # must have
x = a['foo'] # must have
del a[4] # must have
del a[5:12] # should have
del a[5:12:3] # could have
对于getter,我将一个PyMappingMethods
对象添加到用于Attr
的tp_as_mapping
成员。在这里,我有一个注册在mp_length
和mp_subscript
中的函数,这很好用。在
但我不知道如何实现删除(甚至不知道单索引删除)。PyMappingMethods
只多了一个数据成员mp_ass_subscript
。文档提到,PyObject_SetItem()
使用了它,它(根据它的docs)实现了o[key] = v
。在
我想提供项目删除的所有3个变体,但如果需要,我可以使用普通的del a[4]
。我不想支持^ {CD16}},但是我相信如果C++的方法是支持两种结构的话,我就可以在C++方面处理。在
我查看代码,发现
PySequence_DelItem
正在使用第三个参数NULL
的mp_ass_subscript
:用slice删除将把SliceObject作为键传递。在
相关问题 更多 >
编程相关推荐