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正则表达式修复网站文章字体不统一的解决方法
Feb 21 Python
Python Property属性的2种用法
Jun 21 Python
Python图算法实例分析
Aug 13 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
Python3中列表list合并的四种方法
Apr 19 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
Aug 02 Python
解决Tensorboard 不显示计算图graph的问题
Feb 15 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
Python3接口性能测试实例代码
Jun 20 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
实用函数8
2007/11/08 PHP
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
2012/02/03 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
详解vuex的简单使用
2018/03/12 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
jQuery事件多次绑定与解绑问题实例分析
2019/02/19 jQuery
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
swiper4实现移动端导航切换
2020/10/16 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
python开发之字符串string操作方法实例详解
2015/11/12 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
世界最大的票务市场:viagogo
2017/02/16 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
注塑工厂厂长岗位职责
2013/12/02 职场文书
自主招生自荐信指南
2014/02/04 职场文书
出租房屋协议书
2014/09/14 职场文书
领导班子对照检查材料
2014/09/22 职场文书
2015年度村委会工作总结
2015/04/29 职场文书