浅析Python中的getattr(),setattr(),delattr(),hasattr()


Posted in Python onJune 14, 2016

getattr()函数是Python自省的核心函数,具体使用大体如下:

获取对象引用getattr

Getattr用于返回一个对象属性,或者方法

class A: 
def __init__(self): 
self.name = 'zhangjing' 
 #self.age=''
def method(self): 
print"method print" 
Instance = A() 
print getattr(Instance , 'name, 'not find') #如果Instance 对象中有属性name则打印self.name的值,否则打印'not find'
print getattr(Instance , 'age', 'not find') #如果Instance 对象中有属性age则打印self.age的值,否则打印'not find'
print getattr(a, 'method', 'default') 
#如果有方法method,否则打印其地址,否则打印default 
print getattr(a, 'method', 'default')() 
#如果有方法method,运行函数并打印None否则打印default

注:使用getattr可以轻松实现工厂模式。

例:一个模块支持html、text、xml等格式的打印,根据传入的formate参数的不同,调用不同的函数实现几种格式的输出

import statsout 
def output(data, format="text"): 
output_function = getattr(statsout, "output_%s" % format) 
return output_function(data) 
setattr(object, name, value)
This is the counterpart of getattr(). The arguments
are an object, a string and an arbitrary value. The string may name an existing
attribute or a new attribute. The function assigns the value to the attribute,
provided the object allows it. For example, setattr(x,
'foobar', 123) is equivalent to
x.foobar = 123.

这是相对应的getattr()。参数是一个对象,一个字符串和一个任意值。字符串可能会列出一个现有的属性或一个新的属性。这个函数将值赋给属性的。该对象允许它提供。例如,setattr(x,“foobar”,123)相当于x.foobar = 123。

delattr(object, name)

This is a relative of setattr(). The arguments are
an object and a string. The string must be the name of one of the object's
attributes. The function deletes the named attribute, provided the object allows
it. For example, delattr(x, 'foobar') is
equivalent to del x.foobar.

与setattr()相关的一组函数。参数是由一个对象(记住python中一切皆是对象)和一个字符串组成的。string参数必须是对象属性名之一。该函数删除该obj的一个由string指定的属性。delattr(x, 'foobar')=del x.foobar

•hasattr用于确定一个对象是否具有某个属性。

语法:

hasattr(object, name) -> bool

判断object中是否有name属性,返回一个布尔值。

>>> li=["zhangjing","zhangwei"]
>>> getattr(li,"pop")
<built-in method pop of list object at 0x011DF6C0>
>>> li.pop
<built-in method pop of list object at 0x011DF6C0>
>>> li.pop()
'zhangwei'
>>> getattr(li,"pop")()
'zhangjing'
>>>getattr(li, "append")("Moe")
Python 相关文章推荐
python执行get提交的方法
Apr 29 Python
Python定时执行之Timer用法示例
May 27 Python
使用Python解析JSON数据的基本方法
Oct 15 Python
Python松散正则表达式用法分析
Apr 29 Python
Python 使用类写装饰器的小技巧
Sep 30 Python
在python里面运用多继承方法详解
Jul 01 Python
python Django 创建应用过程图示详解
Jul 29 Python
python函数的作用域及关键字详解
Aug 20 Python
Python面向对象原理与基础语法详解
Jan 02 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
Python安装whl文件过程图解
Feb 18 Python
python如何建立全零数组
Jul 19 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 #Python
Python模块包中__init__.py文件功能分析
Jun 14 #Python
Python计算字符宽度的方法
Jun 14 #Python
Python中文分词实现方法(安装pymmseg)
Jun 14 #Python
Python找出list中最常出现元素的方法
Jun 14 #Python
Python中列表元素转为数字的方法分析
Jun 14 #Python
python实现中文转换url编码的方法
Jun 14 #Python
You might like
php 变量定义方法
2009/06/14 PHP
PHP正则表达式 /i, /is, /s, /isU等介绍
2014/10/23 PHP
javascript里的条件判断
2007/02/27 Javascript
javascript定义函数的方法
2010/12/06 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
jQuery的3种请求方式$.post,$.get,$.getJSON
2014/03/28 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
vue input实现点击按钮文字增删功能示例
2019/01/29 Javascript
VSCode使用之Vue工程配置eslint
2019/04/30 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
pygame播放音乐的方法
2015/05/19 Python
python通过socket查询whois的方法
2015/07/18 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
python读取csv文件指定行的2种方法详解
2020/02/13 Python
TFRecord文件查看包含的所有Features代码
2020/02/17 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
应届生保险求职信
2013/11/11 职场文书
领导干部廉政承诺书
2014/03/27 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
大学生学习面向未来的赶考思想汇报
2014/09/12 职场文书
党的群众路线教育实践活动个人剖析材料
2014/10/07 职场文书
校长师德表现自我评价
2015/03/05 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
2015年汽车销售经理工作总结
2015/04/27 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL