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根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
Python实现批量压缩图片
Jan 25 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
Python lxml解析HTML并用xpath获取元素的方法
Jan 02 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
Python中xml和dict格式转换的示例代码
Nov 07 Python
Python实现把类当做字典来访问
Dec 16 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
python接口自动化之ConfigParser配置文件的使用详解
Aug 03 Python
python基于openpyxl生成excel文件
Dec 23 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 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表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
10款实用的PHP开源工具
2015/10/23 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
javascript新手语法小结
2008/06/15 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
vue实现微信获取用户信息的方法
2019/03/21 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Python3写入文件常用方法实例分析
2015/05/22 Python
python日志记录模块实例及改进
2017/02/12 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
python pygame实现方向键控制小球
2019/05/17 Python
使用pyinstaller逆向.pyc文件
2019/12/20 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
python游戏开发的五个案例分享
2020/03/09 Python
Django使用list对单个或者多个字段求values值实例
2020/03/31 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Django实现随机图形验证码的示例
2020/10/15 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
数控专业大学生的自我鉴定
2013/11/13 职场文书
班训口号大全
2014/06/18 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
奠基仪式致辞
2015/07/30 职场文书
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL