浅谈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进阶学习之特殊方法实例详析
Dec 01 Python
pandas中Timestamp类用法详解
Dec 11 Python
浅谈Python中的私有变量
Feb 28 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
python对视频画框标记后保存的方法
Dec 07 Python
python将四元数变换为旋转矩阵的实例
Dec 04 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
Python 用__new__方法实现单例的操作
Dec 11 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
教你怎么用python selenium实现自动化测试
May 27 Python
教你用Python+selenium搭建自动化测试环境
Jun 18 Python
Pygame游戏开发之太空射击实战敌人精灵篇
Aug 05 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
解析dedeCMS验证码的实现代码
2013/06/07 PHP
浅析PHP的ASCII码转换类
2013/07/05 PHP
codeigniter数据库操作函数汇总
2014/06/12 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
2016/05/09 PHP
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
python zip文件 压缩
2008/12/24 Python
python中实现定制类的特殊方法总结
2014/09/28 Python
Python多继承顺序实例分析
2018/05/26 Python
pandas值替换方法
2018/07/10 Python
Python中return self的用法详解
2018/07/27 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
钉钉群自定义机器人消息Python封装的实例
2019/02/20 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
opencv-python 读取图像并转换颜色空间实例
2019/12/09 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
python实现拼图小游戏
2020/02/22 Python
pyspark 随机森林的实现
2020/04/24 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
函授药学自我鉴定
2014/02/07 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
销售人员管理制度
2015/08/06 职场文书
Java中的随机数Random
2022/03/17 Java/Android
Redis分布式锁的7种实现
2022/04/01 Redis