魔法方法之__getitem__(self, key)、__setitem__(self, key, value) 和 __delitem__(self, key)

复制代码
 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
复制代码

 

posted @   Allen_Hao  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示