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 web程序
Sep 11 Python
Python实现的简单算术游戏实例
May 26 Python
Django中模版的子目录与include标签的使用方法
Jul 16 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
神经网络python源码分享
Dec 15 Python
python:pandas合并csv文件的方法(图书数据集成)
Apr 12 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
pip指定python位置安装软件包的方法
Jul 12 Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 Python
为什么黑客都用python(123个黑客必备的Python工具)
Jan 31 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 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运行时强制显示出错信息的代码
2011/04/20 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
Smarty局部缓存的几种方法简介
2014/06/17 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
浅谈js中的闭包
2015/03/16 Javascript
jQuery控制网页打印指定区域的方法
2015/04/07 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
js实现兼容PC端和移动端滑块拖动选择数字效果
2017/02/16 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
Angular2使用vscode断点调试ts文件的方法
2017/12/13 Javascript
在vue项目中优雅的使用SVG的方法实例详解
2018/12/03 Javascript
Python中使用PIPE操作Linux管道
2015/02/04 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
Python中pow()和math.pow()函数用法示例
2018/02/11 Python
python读写LMDB文件的方法
2018/07/02 Python
详解python读取和输出到txt
2019/03/29 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
分享一个pycharm专业版安装的永久使用方法
2019/09/24 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
个人简历自我评价
2014/01/06 职场文书
战友聚会主持词
2014/04/02 职场文书
创文明城市标语
2014/06/16 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
教师旷工检讨书
2015/08/15 职场文书
2016年社区“6.26”禁毒日宣传活动总结
2016/04/05 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
python 命令行传参方法总结
2021/05/25 Python
Python中的套接字编程是什么?
2021/06/21 Python