Python索引自定义类:__getitem__,__setitem__和__delitem__
示例
class MultiIndexingList:
def __init__(self, value):
self.value= value
def __repr__(self):
return repr(self.value)
def __getitem__(self, item):
if isinstance(item, (int, slice)):
return self.__class__(self.value[item])
return [self.value[i] for i in item]
def __setitem__(self, item, value):
if isinstance(item, int):
self.value[item] = value
elif isinstance(item, slice):
raise ValueError('Cannot interpret slice with multiindexing')
else:
for i in item:
if isinstance(i, slice):
raise ValueError('Cannot interpret slice with multiindexing')
self.value[i] = value
def __delitem__(self, item):
if isinstance(item, int):
del self.value[item]
elif isinstance(item, slice):
del self.value[item]
else:
if any(isinstance(elem, slice) for elem in item):
raise ValueError('Cannot interpret slice with multiindexing')
item = sorted(item, reverse=True)
for elem in item:
del self.value[elem]这允许切片和索引元素访问:
a = MultiIndexingList([1,2,3,4,5,6,7,8]) a #输出:[1、2、3、4、5、6、7、8] a[1,5,2,6,1] #输出:[2、6、3、7、2] a[4, 1, 5:, 2, ::2] #输出:[5、2,[6、7、8],3,[1、3、5、7] # 4|1-|----50:---|2-|-----::2----- <-- indicated which element came from which index
设置和删除元素时仅允许使用逗号分隔的整数索引(无切片):
a[4] = 1000 a #输出:[1、2、3、4、1000、6、7、8] a[2,6,1] = 100 a #输出:[1、100、100、4、1000、6、100、8] del a[5] a #输出:[1、100、100、4、1000、100、8] del a[4,2,5] a #输出:[1、100、4、8]
热门推荐
1 训练狗狗憋尿
2 狗狗追踪训练
3 狗狗训练要多少钱
5 深圳狗狗训练
6 训练狗狗唤回
7 狗狗叫怎么训练
8 狗狗训练班
10 狗狗社会化训练
11 狗狗叫回训练
12 广州狗狗训练学校
13 狗狗训练躺下
14 狗狗随行训练
15 训练狗狗巡回
16 狗狗要怎么训练
17 狗狗喂食训练
18 训练狗狗躺下