浅谈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 网络爬虫初级实现代码
Feb 27 Python
Python中的FTP通信模块ftplib的用法整理
Jul 08 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
Apr 26 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
python实现美团订单推送到测试环境,提供便利操作示例
Aug 09 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
python线程池如何使用
May 28 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
Django:使用filter的pk进行多值查询操作
Jul 15 Python
python实现大文本文件分割成多个小文件
Apr 20 Python
python如何进行基准测试
Apr 26 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
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
php以post形式发送xml的方法
2014/11/04 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
PHP children()函数讲解
2019/02/03 PHP
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
解决vue v-for 遍历循环时key值报错的问题
2018/09/06 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
Python利用公共键如何对字典列表进行排序详解
2018/05/19 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
2020/06/30 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
Max&Co官网:意大利年轻女性时尚品牌
2017/05/16 全球购物
android面试问题与答案
2016/12/27 面试题
平安家庭示范户事迹
2014/06/02 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
授权委托书公证
2014/09/14 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
趵突泉导游词
2015/02/03 职场文书
办公室文员岗位职责
2015/02/04 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python