如何在C[+;+;]中实现delitem和delslice? 我在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

如何在C[+;+;]中实现delitem和delslice? 我在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,python,c++,python-2.7,Python,C++,Python 2.7,对于getter,我将一个PyMappingMethods对象添加到用于Attr的PyTypeObject成员的tp\u as\u映射中。在那里,我在mp_length和mp_subscript中注册了一个函数,这个函数运行良好 但我不知道如何实现删除(甚至不知道单索引删除)PyMappingMethods只有一个数据成员,mp\u ass\u subscript。文档中提到这是由PyObject\u SetItem()使用的,它(根据其)实现o[key]=v 在我能找到的任何文档(或谷歌)中都

对于getter,我将一个
PyMappingMethods
对象添加到用于
Attr
PyTypeObject
成员的
tp\u as\u映射中。在那里,我在
mp_length
mp_subscript
中注册了一个函数,这个函数运行良好

但我不知道如何实现删除(甚至不知道单索引删除)
PyMappingMethods
只有一个数据成员,
mp\u ass\u subscript
。文档中提到这是由
PyObject\u SetItem()
使用的,它(根据其)实现
o[key]=v

在我能找到的任何文档(或谷歌)中都没有提到钩住C/C++函数供
PyObject\u DelItem()
PySequence\u DelItem()或
PySequence\u DelSlice()使用。如何在我的C++实现的对象中实现这些


我想提供项目删除的所有3种变体,但如果需要,我可以只使用普通的
dela[4]
。我不想支持<代码> DEL A[Fo]’/Cuffe,但是我相信如果C++是唯一的方式来支持两个构造的话。< /P> < P>我查看代码,它看起来像<代码> PyStReSngDelijs<代码>使用<代码> MPyasSuxPuthPo> <代码>第三个参数<代码> null < /C> >:

PyObject_DelItem(PyObject *o, PyObject *key) {
    ...
    m = o->ob_type->tp_as_mapping;
    if (m && m->mp_ass_subscript)
        return m->mp_ass_subscript(o, key, (PyObject*)NULL);
    ...
使用slice删除将作为键传递SliceObject