1 ''' 2 __getitem__(self, key)、__setitem__(self, key, value) 和 __delitem__(self, key) 是 Python 中的特殊方法,用于定义对对象进行索引操作时的行为。 3 它们分别用于获取、设置和删除对象中的元素 4 1. __getitem__(self, key):该方法用于通过索引或键来获取对象中的元素。应该返回与给定索引或键相关联的值。如果索引或键不存在,可以抛出 IndexError 或 KeyError 异常。 5 2. __setitem__(self, key, value):该方法用于通过索引或键来设置对象中的元素。应该根据给定的索引或键将值存储在对象中。如果索引或键不存在,可以扩展容器并添加新元素。 6 3. __delitem__(self, key):该方法用于通过索引或键来删除对象中的元素。应该根据给定的索引或键从对象中删除相应的元素。如果索引或键不存在,可以抛出 IndexError 或 KeyError 异常。 7 通过实现 __getitem__()、__setitem__() 和 __delitem__() 方法,我们可以在自定义的容器类中支持索引操作,使得对象可以像内置的容器一样进行索引访问、赋值和删除操作。 8 ''' 9 10 11 class MyList: 12 def __init__(self): 13 self.data = [] 14 15 def add(self, item): 16 self.data.append(item) 17 18 def __getitem__(self, index): 19 return self.data[index] 20 21 def __setitem__(self, index, value): 22 self.data[index] = value 23 24 def __delitem__(self, index): 25 del self.data[index] 26 27 28 my_list = MyList() 29 my_list.add(1) 30 my_list.add(2) 31 my_list.add(3) 32 33 ''' 34 我们定义了一个名为 MyList 的自定义容器类。我们实现了 add() 方法来向容器中添加元素,并重载了 __getitem__() 方法以通过索引来获取容器中的元素。 35 当我们使用索引 my_list[0] 访问容器时,实际上会自动调用 my_list.__getitem__(0) 方法,并返回相应的结果。 36 ''' 37 print(my_list[0]) # 输出:1 38 39 ''' 40 实现了 __setitem__() 方法来通过索引设置容器中的元素。 41 当我们执行赋值操作 my_list[0] = 10 时,实际上会自动调用 my_list.__setitem__(0, 10) 方法,并将值 10 存储在索引为 0 的位置上 42 ''' 43 my_list[0] = 10 44 print(my_list[0]) # 输出:10 45 46 ''' 47 实现了 __delitem__() 方法来通过索引删除容器中的元素。 48 当我们执行删除操作 del my_list[0] 时,实际上会自动调用 my_list.__delitem__(0) 方法,并从容器中删除索引为 0 的元素。 49 ''' 50 print(my_list.data) # [10, 2, 3] 51 del my_list[0] # 如果没有实现__delitem__方法,会报错: AttributeError: __delitem__ 52 print(my_list[0]) # 输出:2
标签:__,self,list,索引,key,my From: https://www.cnblogs.com/allenxx/p/17549172.html