浅谈Python类的__getitem__和__setitem__特殊方法


Posted in Python onDecember 25, 2016

一个有点绕的例子,用PyScripter调试器步进跟踪可以看清楚对 象结构的具体细节。

对原作改变了一下,在未定义子对象属性时__getitem__中使用现成的__setitem__来定义。

## encoding:utf-8
"""
这个类继承了object, object是Python的最小单元,可以在Python的">>>"控制台用dir(objct)或者dir (__builtins__.object)命令查看它的属性,可以看到__setattr__, __new__...他们是python中任何对象都会具有的属性,你也可以dir(1)和dir(int)看看,可看到更多内容,在这里,1作为一个实例化的int对象出现。而这些__xxx__属性有什么用呢?在接下来的代码中,我们可以了解__getitem__和__setitem__有什么用 (这两个属性在dict对象中非常重要)
"""

class WPUnit(object):
  def __init__(self):
    self._res={}

def __setitem__(self,key,val):
  self._res[key]=val

def __getitem__(self,key):
  if self._res.has_key(key):
    return self._res[key]
  else:
    r=WPUnit()
    self.__setitem__(key,r)
    return r

a=WPUnit()
a['a']['b']['c']['d']['e']['f']['g']=5
print a['a']['b']['c']['d']['e']['f']['g']
>>> class testsetandget: 
  kk = {}; 
  def __getitem__(self, key): 
    return self.kk[key]; 
  def __setitem__(self, key, value): 
    self.kk[key] = value; 
     
>>> a = testsetandget() 
>>> a['first'] = 1 
>>> a['first'] 
1 
>>> a.__setitem__('second', 2) 
>>> a.__getitem__('second') 
2 
>>> a['second'] 
2 
>>>

以上就是小编为大家带来的浅谈Python类的__getitem__和__setitem__特殊方法全部内容了,希望大家多多支持三水点靠木~

Python 相关文章推荐
python利用装饰器进行运算的实例分析
Aug 04 Python
Python编程中的文件操作攻略
Oct 16 Python
详解python string类型 bytes类型 bytearray类型
Dec 16 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
python线程信号量semaphore使用解析
Nov 30 Python
python实现坦克大战
Apr 24 Python
Python小白垃圾回收机制入门
Jun 09 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
python help函数实例用法
Dec 06 Python
用python删除文件夹中的重复图片(图片去重)
May 12 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 #Python
详解python进行mp3格式判断
Dec 23 #Python
详解python发送各类邮件的主要方法
Dec 22 #Python
详解python 发送邮件实例代码
Dec 22 #Python
使用Python3 编写简单信用卡管理程序
Dec 21 #Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 #Python
详解python中的json的基本使用方法
Dec 21 #Python
You might like
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
2015/01/07 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
JS实现的冒泡排序,快速排序,插入排序算法示例
2019/03/02 Javascript
vue实现购物车小案例
2019/09/27 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
python之模拟鼠标键盘动作具体实现
2013/12/30 Python
用Python编程实现语音控制电脑
2014/04/01 Python
Python中的闭包详细介绍和实例
2014/11/21 Python
python单例设计模式实现解析
2020/01/07 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
英国在线潜水商店:Simply Scuba
2019/03/25 全球购物
法国在线药房:DoctiPharma
2020/10/21 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
总裁岗位职责
2013/12/04 职场文书
中英文求职信范文
2014/01/27 职场文书
情人节寄语大全
2014/04/11 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
2015新年寄语大全
2014/12/08 职场文书
《我们的民族小学》教学反思
2016/02/19 职场文书
Centos7中MySQL数据库使用mysqldump进行每日自动备份的编写
2021/08/02 MySQL