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读取html中指定元素生成excle文件示例
Apr 03 Python
利用Python的Django框架中的ORM建立查询API
Apr 20 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
Jul 04 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
python障碍式期权定价公式
Jul 19 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
Python使用内置函数setattr设置对象的属性值
Oct 16 Python
python 检测nginx服务邮件报警的脚本
Dec 31 Python
python中使用asyncio实现异步IO实例分析
Feb 26 Python
pytorch 中autograd.grad()函数的用法说明
May 12 Python
python scrapy简单模拟登录的代码分析
Jul 21 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实现验证码功能
2006/10/09 PHP
PHP 危险函数全解析
2009/09/09 PHP
php知道与问问的采集插件代码
2010/10/12 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
总结PHP中DateTime的常用方法
2016/08/11 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
2017/07/20 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
javascript实现面向对象类的功能书写技巧
2010/03/07 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
布同自制Python函数帮助查询小工具
2011/03/13 Python
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
Python get获取页面cookie代码实例
2018/09/12 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
时尚圣经:The Fashion Bible
2019/03/03 全球购物
校三好学生主要事迹
2014/01/11 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
销售开票员岗位职责
2015/04/15 职场文书
全陪导游词开场白
2015/05/29 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang
Python import模块的缓存问题解决方案
2021/06/02 Python
MySQL分区路径子分区再分区
2022/04/13 MySQL