浅谈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发送arp欺骗攻击代码分析
Jan 16 Python
Python中的下划线详解
Jun 24 Python
python 类详解及简单实例
Mar 24 Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 Python
python try except 捕获所有异常的实例
Oct 18 Python
Python 实现微信防撤回功能
Apr 29 Python
详解如何设置Python环境变量?
May 13 Python
python opencv实现gif图片分解的示例代码
Dec 13 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 Python
python遍历路径破解表单的示例
Nov 21 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
详解Go语言运用广度优先搜索走迷宫
Jun 23 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
使用eAccelerator加密PHP程序
2008/10/03 PHP
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
CodeIgniter删除和设置Cookie的方法
2015/04/07 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
php实现socket推送技术的示例
2017/12/20 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
Vue项目组件化工程开发实践方案
2018/01/09 Javascript
vue-cli开发环境实现跨域请求的方法
2018/04/07 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
2019/05/12 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
神经网络理论基础及Python实现详解
2017/12/15 Python
Django中数据库的数据关系:一对一,一对多,多对多
2018/10/21 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
高三家长寄语
2014/04/03 职场文书
接收函格式
2015/01/30 职场文书
财务个人年度总结范文
2015/02/26 职场文书
法定代表人资格证明书
2015/06/18 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
浅谈Redis的事件驱动模型
2022/05/30 Redis
 python中的元类metaclass详情
2022/05/30 Python
利用Redis实现点赞功能的示例代码
2022/06/28 Redis