首页 > 其他分享 >魔法方法之__getitem__(self, key)、__setitem__(self, key, value) 和 __delitem__(self, key)

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

时间:2023-07-12 23:33:21浏览次数:33  
标签:__ self list 索引 key my

 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

相关文章

  • Proton 推出开源密码管理器,兼身份管理器
    Proton是由来自欧洲核研究组织(CERN)的科学家于2014年在瑞士日内瓦创立的一家公司,其最知名的应该就是电子邮件服务ProtonMail,主打端到端加密、安全和隐私保护。Proton由科学家领导,其中包括万维网的发明者TimBerners-Lee。该公司曾于今年4月份宣布推出一个新的......
  • Proton 推出开源密码管理器,兼身份管理器
    Proton是由来自欧洲核研究组织(CERN)的科学家于2014年在瑞士日内瓦创立的一家公司,其最知名的应该就是电子邮件服务ProtonMail,主打端到端加密、安全和隐私保护。Proton由科学家领导,其中包括万维网的发明者TimBerners-Lee。该公司曾于今年4月份宣布推出一个新的......
  • 【热门技术】一文详细解读云计算
    ......
  • MVC 模式和三层架构
    MVC模式MVC是一种分层开发的模式,其中:M:Model,业务模型,处理业务V:View,视图,界面展示C:Controller,控制器,处理请求,调用模型和视图控制器(serlvlet)用来接收浏览器发送过来的请求,控制器调用模型(JavaBean)来获取数据,比如从数据库查询数据;控制器获取到数据后再交由视图(JSP)进行数......
  • EAS_如何获取并校验DEP中新加的字段
    1.添加字段如果是普通单据编辑界面,可以直接再编辑列表上添加相应控件,并命名相应的名称,比如这里我加了一个票据包号,并修改下面属性的名称为字段的名称,                      这样,绑定实体字段会自动更新修改的值,这里的名称,我们后续......
  • GIT常用命令
    常用命令查看状态gitstatus拉取远程分支gitfetch/gitfetch—all拉取远程分支并同步本地分支gitfetchorigin拉取远程分支并与本地代码合并gitpull/gitpullorigin远程仓库强行覆盖本地gitfetchgitreset--hardorigin/gitpull本地上传远程仓库git......
  • 算法小菜鸟成长记录Day01-二分查找和双重指针
    二分查找和双重指针今天是代码随想录刷题的第一天,刚开始刷的时候昏昏欲睡,其中用时3h主要实现以下几个部分二分查找:其中二分查找中其收获最大部分就在于对左开右闭区间的理解,如果都是闭区间也就是【a,b】,那么在while中的条件就为while(left<=right),确保其中是拥有元素也就是......
  • selenium 根据期刊信息获取知网文献信息 pt.1
    哈喽大家好,我是咸鱼之前写过一篇获取知网文献信息的文章(关于《爬取知网文献信息》中代码的一些优化),看了下后台数据还挺不错所以咸鱼决定再写一篇知网文献信息爬取的文章需要注意的是文章只是针对某一特定期刊的爬取,希望小伙伴们把关注点放在如何分析网页以及如何定位元素上面......
  • 数学归纳法证明贪心实例
    1.选择不相交区间问题(具体见一本通提高篇P4)假设已经选择的区间是最优的方案的一部分,下面考虑如何选择会使方案达到最优。因为是按照结束时间升序排序的,如果我们不选择当前这一个合法的(设为A)而是去选择之后的合法的(设为B),那么无论最后的方案是怎样的,都可以将B换成A从而符合题意。......
  • 文本格式进阶
    day1描述型列表链接 注意的点:一个术语可以同时有多个描述,如:<dl><dt>旁白</dt><dd>戏剧中,为渲染幽默或戏剧性效果而进行的场景之外的补充注释念白,只面向观众,内容一般都是角色的感受、想法、以及一些背景信息等。</dd><dd>写作中,指与当前主题相关的一段......