浅谈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远程桌面协议RDPY安装使用介绍
Apr 15 Python
Python实现的直接插入排序算法示例
Apr 29 Python
python实现旋转和水平翻转的方法
Oct 25 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
python如何实现异步调用函数执行
Jul 08 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
Python的对象传递与Copy函数使用详解
Dec 26 Python
opencv python如何实现图像二值化
Feb 03 Python
Tensorflow限制CPU个数实例
Feb 06 Python
Python tcp传输代码实例解析
Mar 18 Python
python pyg2plot的原理知识点总结
Feb 28 Python
python 利用 PIL 将数组值转成图片的实现
Apr 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
收音机另类DIY - 纸巾盒做外壳
2021/03/02 无线电
PHP利用REFERER根居访问来地址进行页面跳转
2013/09/28 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
关于jQuery UI 使用心得及技巧
2012/10/10 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
js变换显示图片的实例
2013/04/16 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
简单了解Python3里的一些新特性
2019/07/13 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
keras实现多种分类网络的方式
2020/06/11 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
Linux内核产生并发的原因
2012/07/13 面试题
信电学院毕业生自荐书
2014/05/24 职场文书
元旦标语大全
2014/10/09 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
Python IO文件管理的具体使用
2022/03/20 Python
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫