浅析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中内置的NotImplemented类型的用法
Mar 31 Python
Apache如何部署django项目
May 21 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
Dec 13 Python
使用python自动追踪你的快递(物流推送邮箱)
Mar 17 Python
python中@contextmanager实例用法
Feb 07 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
python使用glob检索文件的操作
May 20 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 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
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
PHP中Session引起的脚本阻塞问题解决办法
2014/04/08 PHP
彻底删除thinkphp3.1案例blog标签的方法
2014/12/05 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
JavaScript声明变量名的语法规则
2015/07/10 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
django之session与分页(实例讲解)
2017/11/13 Python
python复制文件到指定目录的实例
2018/04/27 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
详解python uiautomator2 watcher的使用方法
2019/09/09 Python
使用python绘制温度变化雷达图
2019/10/18 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
高中考试作弊检讨书
2014/01/14 职场文书
接受捐赠答谢词
2014/01/27 职场文书
经典婚礼主持词
2014/03/13 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
文明旅游倡议书
2015/04/28 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL