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判断字符串是否纯数字的方法
Nov 19 Python
python MySQLdb Windows下安装教程及问题解决方法
May 09 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
pip安装Python库时遇到的问题及解决方法
Nov 23 Python
Python基于贪心算法解决背包问题示例
Nov 27 Python
对IPython交互模式下的退出方法详解
Feb 16 Python
Python List cmp()知识点总结
Feb 18 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
聊聊python中的循环遍历
Sep 07 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 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中GET变量的使用
2006/10/09 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
PHP curl实现抓取302跳转后页面的示例
2014/07/04 PHP
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
JavaScript操作 url 中 search 部分方法函数
2016/06/15 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
Bootstrap免费字体和图标网站(值得收藏)
2017/03/16 Javascript
基于vue中css预加载使用sass的配置方式详解
2018/03/13 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
[40:19]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.18
2020/12/19 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
Python实现判断一个字符串是否包含子串的方法总结
2017/11/21 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
python类共享变量操作
2020/09/03 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
CSS3美化表单控件全集
2016/06/29 HTML / CSS
澳大利亚买卖正宗二手奢侈品交易平台:Luxe.It.Fwd
2019/10/16 全球购物
高中英语教学反思
2014/02/04 职场文书
趣味活动策划方案
2014/02/08 职场文书
幼儿教师师德演讲稿
2014/05/06 职场文书
融资合作协议书范本
2014/10/17 职场文书
大学生见习报告范文
2014/11/03 职场文书
2014年资料员工作总结
2014/11/18 职场文书
2016春季运动会通讯稿
2015/07/18 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle