Python类中方法getitem和getattr详解


Posted in Python onAugust 30, 2019

1、getitem 方法

使用这个方法最大的印象就是调用对象的属性可以像字典取值一样使用中括号['key']

使用中括号对对象中的属性进行取值、赋值或者删除时,会自动触发对应的__getitem__、__setitem__、__delitem__方法

代码如下:

class Foo(object):
  def __init__(self):
    self.name = 'jack'

  def __getitem__(self,item):
    if item in self.__dict__:    # item = key,判断该key是否存在对象的 __dict__ 里,
      return self.__dict__[item] # 返回该对象 __dict__ 里key对应的value

  def __setitem__(self, key, value):
    self.__dict__[key] = value   # 在对象 __dict__ 为指定的key设置value

  def __delitem__(self, key):
    del self.__dict__[key]     # 在对象 __dict__ 里删除指定的key

f1 = Foo()
print(f1['name'])  # jack
f1['age'] =10    
print(f1['age'])  # 10
del f1['name']
print(f1.__dict__) # {'age': 10}

2、getattr 方法

使用对象取值、赋值或者删除时,会默认的调用对应的__getattr__、__setattr__、__delattr__方法。

对象取值时,取值的顺序为:先从object里__getattribute__中找,第二步从对象的属性中找,第三步从当前类中找,第四步从父类中找,第五步从__getattr__中找,如果没有,直接抛出异常。

代码如下:

class Foo(object):
  def __init__(self):
    self.name = 'jack'

  def __getattr__(self, item):
    if item in self.__dict__:
      return self.__dict__[item]

  def __setattr__(self, key, value):
    self.__dict__[key] = value

  def __delattr__(self, item):
    del self.__dict__[item]

c1 = Foo()
print(c1.name) # jack
c1.age = 18
print(c1.age)  # 18
del c1.age   # 删除 对象c1的age
print(c1.age)  # None

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python基础入门之seed()方法的使用
May 15 Python
Python实现导出数据生成excel报表的方法示例
Jul 12 Python
Python中进程和线程的区别详解
Oct 29 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
Aug 01 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 Python
Python的PIL库中getpixel方法的使用
Apr 09 Python
python 瀑布线指标编写实例
Jun 03 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
Jun 04 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 Python
Python paramiko模块使用解析(实现ssh)
Aug 30 #Python
django中上传图片分页三级联动效果的实现代码
Aug 30 #Python
python实现生成Word、docx文件的方法分析
Aug 30 #Python
python解析yaml文件过程详解
Aug 30 #Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 #Python
python数据持久存储 pickle模块的基本使用方法解析
Aug 30 #Python
python 命令行传入参数实现解析
Aug 30 #Python
You might like
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
php去除html标记的原生函数详解
2015/01/27 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
JS实现的自定义水平滚动字体插件完整实例
2016/06/17 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
js实现一个简易计算器
2020/03/30 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
vue 组件简介
2020/07/31 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
2021年值得向Python开发者推荐的VS Code扩展插件
2021/01/25 Python
使用canvas绘制贝塞尔曲线
2014/12/17 HTML / CSS
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
迷你西餐厅创业计划书范文
2013/12/31 职场文书
学习党代会心得体会
2014/09/05 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
2015年学校体育工作总结
2015/04/22 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
用Python selenium实现淘宝抢单机器人
2021/06/18 Python