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生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
python3之微信文章爬虫实例讲解
Jul 12 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
Python分支结构(switch)操作简介
Jan 17 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
和孩子一起学习python之变量命名规则
May 27 Python
python实现对csv文件的列的内容读取
Jul 04 Python
详解flask表单提交的两种方式
Jul 21 Python
Python实现将Excel转换成xml的方法示例
Aug 25 Python
python读取并写入mat文件的方法
Jul 12 Python
Python有参函数使用代码实例
Jan 06 Python
Python CategoricalDtype自定义排序实现原理解析
Sep 11 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 采集获取指定网址的内容
2010/01/05 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
最简单的js图片切换效果实现代码
2011/09/24 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
在JavaScript中操作时间之getMonth()方法的使用
2015/06/10 Javascript
bootstrap中的 form表单属性role="form"的作用详解
2017/01/20 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
H5图片压缩与上传实例
2017/04/21 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
JS document内容及样式操作完整示例
2020/01/14 Javascript
初步解析Python中的yield函数的用法
2015/04/03 Python
python3使用GUI统计代码量
2019/09/18 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
css3加js做一个简单的3D行星运转效果实例代码
2017/01/18 HTML / CSS
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
世界首屈一指的在线男士内衣权威:HisRoom
2017/08/05 全球购物
人事助理岗位职责
2013/11/18 职场文书
2013的个人自我评价
2013/12/26 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
安全责任书范文
2014/03/12 职场文书
我的画教学反思
2014/04/28 职场文书
安全施工责任书
2014/08/25 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
学习保证书100字
2015/02/26 职场文书
档案工作个人总结
2015/03/03 职场文书
网络销售员岗位职责
2015/04/11 职场文书
护士2015年终工作总结
2015/04/29 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS