浅谈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 相关文章推荐
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
python矩阵转换为一维数组的实例
Jun 05 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
python numpy 一维数组转变为多维数组的实例
Jul 02 Python
Python函数参数操作详解
Aug 03 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
Aug 09 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 Python
Python文本处理简单易懂方法解析
Dec 19 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
Python求区间正整数内所有素数之和的方法实例
Oct 13 Python
Python用户自定义异常的实现
Dec 25 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实现window平台的checkdnsrr函数
2015/05/27 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
2015/07/15 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
细说浏览器特性检测(2)-通用事件检测
2010/11/05 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
javascript常见操作汇总
2014/09/03 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
超详细的javascript数组方法汇总
2015/11/21 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
浅析Python中的多进程与多线程的使用
2015/04/07 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
Python转换时间的图文方法
2019/07/01 Python
CSS3中Transition动画属性用法详解
2016/07/04 HTML / CSS
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
大四学生毕业自荐信
2013/11/07 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
暑期社会实践心得体会
2014/09/02 职场文书
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python