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的汉字转GBK码实现代码
Feb 19 Python
python实现问号表达式(?)的方法
Nov 27 Python
Python的Flask框架中web表单的教程
Apr 20 Python
python生成验证码图片代码分享
Jan 28 Python
django+echart绘制曲线图的方法示例
Nov 26 Python
使用python进行波形及频谱绘制的方法
Jun 17 Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
如何使用Python脚本实现文件拷贝
Nov 20 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 Python
pygame实现飞机大战
Mar 11 Python
python3+opencv 使用灰度直方图来判断图片的亮暗操作
Jun 02 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
Apache2 httpd.conf 中文版
2006/12/06 PHP
PHP批量生成缩略图的代码
2008/07/19 PHP
win7系统配置php+Apache+mysql环境的方法
2015/08/21 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
JavaScript中使用构造函数实现继承的代码
2010/08/12 Javascript
基于jquery的图片的切换(以数字的形式)
2011/02/14 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
javascript去除字符串中所有标点符号和提取纯文本的正则
2014/06/07 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
Angular X中使用ngrx的方法详解(附源码)
2017/07/10 Javascript
vue使用axios跨域请求数据问题详解
2017/10/18 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
关于python2 csv写入空白行的问题
2018/06/22 Python
python多进程间通信代码实例
2019/09/30 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
化工专业应届生求职信
2013/11/08 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
总经理职责
2013/12/22 职场文书
初中生自我评价
2014/02/01 职场文书
实习老师离校感言
2014/02/03 职场文书
自行车广告词大全
2014/03/21 职场文书
优秀大学生自荐信
2015/03/26 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
浅谈Java实现分布式事务的三种方案
2021/06/11 Java/Android
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技