我可以使用del
从列表中删除切片。例如
a = [1, 2, 3, 4, 5, 6, 7]
del a[0:4:2]
print(a)
输出
[2, 4, 5, 6, 7]
我的问题是这里有a
调用什么方法,我需要做些什么才能使del a[0:4:2]
适用于自定义类的对象?
我试过了:
class Spam:
def __delslice__(self, i, j):
print('Slice deleted')
a = Spam()
del a[1:3]
但这给了我错误消息TypeError: 'Spam' object does not support item deletion
。在任何情况下,__delslice__
只有两个参数(除self
之外),而del a[0:4:2]
这样的调用需要3才有意义。
我也试过这个:
class Spam:
def __delitem__(self, item):
print('item deleted')
a = Spam()
del a[1:3]
并打印item deleted
,而我希望它打印item deleted
两次(因为切片[1:3]
包含两个索引1
和2
)。
有人可以解释发生了什么吗?