浅析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 相关文章推荐
Python3实现的腾讯微博自动发帖小工具
Nov 11 Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
Python适配器模式代码实现解析
Aug 02 Python
python使用celery实现异步任务执行的例子
Aug 28 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
python-地图可视化组件folium的操作
Dec 14 Python
Python实现王者荣耀自动刷金币的完整步骤
Jan 22 Python
Python爬虫UA伪装爬取的实例讲解
Feb 19 Python
教你漂亮打印Pandas DataFrames和Series
May 29 Python
Python3 类型标注支持操作
Jun 02 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 fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
基于jquery的tab切换 js原理
2010/04/01 Javascript
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
JS window对象的top、parent、opener含义介绍
2013/12/03 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
JS实现可以用键盘方向键控制的动画
2020/12/11 Javascript
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
Python中交换两个元素的实现方法
2018/06/29 Python
django 外键model的互相读取方法
2018/12/15 Python
利用python修改json文件的value方法
2018/12/31 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Windows下Anaconda安装、换源与更新的方法
2020/04/17 Python
Python logging模块原理解析及应用
2020/08/13 Python
html5 学习简单的拾色器
2010/09/03 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
护士找工作求职信
2014/07/02 职场文书
无财产离婚协议书范本
2014/10/28 职场文书
家长对孩子的寄语
2015/02/26 职场文书
2016年国陪研修感言
2015/11/18 职场文书
Python 文本滚动播放器的实现代码
2021/04/25 Python
Python学习之包与模块详解
2022/03/19 Python