浅析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中的字典来处理索引统计的方法
May 05 Python
Python中easy_install 和 pip 的安装及使用
Jun 05 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
PyCharm在新窗口打开项目的方法
Jan 17 Python
详解Python读取yaml文件多层菜单
Mar 23 Python
详解Python静态网页爬取获取高清壁纸
Apr 23 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
python实现的多任务版udp聊天器功能案例
Nov 13 Python
TensorFlow设置日志级别的几种方式小结
Feb 04 Python
python实现感知机模型的示例
Sep 30 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
3款值得推荐的微信开发开源框架
2014/10/28 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
详解在React里使用&quot;Vuex&quot;
2018/04/02 Javascript
jquery无缝图片轮播组件封装
2020/11/25 jQuery
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
python 中文乱码问题深入分析
2011/03/13 Python
Python sys.argv用法实例
2015/05/28 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
Python随机读取文件实现实例
2017/05/25 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
python线程信号量semaphore使用解析
2019/11/30 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
python3 实现口罩抽签的功能
2020/03/11 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
Python爬虫UA伪装爬取的实例讲解
2021/02/19 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
EMU Australia澳大利亚官网:澳大利亚本土雪地靴品牌
2019/07/24 全球购物
皮肤科医师岗位职责
2013/12/04 职场文书
年度考核评语
2014/01/19 职场文书
成人继续教育实施方案
2014/03/01 职场文书
消防安全员岗位职责
2014/03/10 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python
hive数据仓库新增字段方法
2022/06/25 数据库
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python