Python中getattr函数和hasattr函数作用详解


Posted in Python onJune 14, 2016

hasattr(object, name)

作用:判断对象object是否包含名为name的特性(hasattr是通过调用getattr(ojbect, name)是否抛出异常来实现的)。

示例:

>>> hasattr(list, 'append')
True >>> hasattr(list, 'add')
False 
getattr(object,name,default):

作用:返回object的名称为name的属性的属性值,如果属性name存在,则直接返回其属性值;如果属性name不存在,则触发AttribetError异常或当可选参数default定义时返回default值。

这个方法最主要的作用是实现反射机制。也就是说可以通过字符串获取方法实例。这样,你就可以把一个类可能要调用的方法放在配置文件里,在需要的时候动态加载。

下面我们使用小例子来说明它们的用法:

import func_file #自定义python模块
cs=input('请输入要访问的URL:')
if cs=='loggin':
func_file.loggin()
if cs =='home':
func_file.home()
if cs =='':
pass#以下省略

当我定义一个自定义模块,去调用其中的方法的时候,使用if去判断时,如果模块内用很多方法,会大大影响开发的效率,代码冗余差,显然这是不可取的。下面我们使用hasattr()函数来实现我们的需求:

示例如下:

import func_file #自定义python模块,需事先存在
def run():
while True:
cs=input('请输入要访问的URL:')
#hasattr利用字符串的形式去对象(模块)中操作(寻找)成员
if hasattr(func_file,cs): #判断用户输入的URL是否在func_file模块中
func=getattr(func_file,cs) #有则将func_file模块下的cs函数赋值 
func() #等同于执行func_file模块下的cs函数
else:
print('404')#定义错误页面
run()

我们导入一个自定义模块后,gatattr可以根据输入的内容动态加载,利用hasattr()函数来判断用户输入的是否存在,不存在则调用自定义方法。

是不是感觉和我们打开网址URL很类似啊!

上一个示例有一个问题,在实际情况中,我们的功能函数可能存放在很多模块中,每一个都需要单独导入,那我们可不可以利用getattr()函数去动态加载模块呢?当然可以啦

请看示例:

def run():
while True:
cs=input('请输入:')
v,k=cs.split('/') #获得输入的模块和模块的方法
obj=__import__('lib.'+v,fromlist=True) #调用lib目录下的模块fromlist=True按路径连接的方式导入
if hasattr(obj,k):
f= getattr(obj,k)
f()
else:
print('404')
if __name__ == '__main__':
run()

是不是感到getattr很强大啊。其实,getattr()就是实现python反射的一块积木,结合其它方法如setattr(),dir() 等,我们可以还可以做出很多有趣的事情。

Python 相关文章推荐
python提示No module named images的解决方法
Sep 29 Python
python使用点操作符访问字典(dict)数据的方法
Mar 16 Python
Python对List中的元素排序的方法
Apr 01 Python
对numpy的array和python中自带的list之间相互转化详解
Apr 13 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
python实现多张图片拼接成大图
Jan 15 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
Apr 05 Python
用python打印菱形的实操方法和代码
Jun 25 Python
pytorch: Parameter 的数据结构实例
Dec 31 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 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
Python的Django框架中消息通知的计数器实现教程
Jun 13 #Python
You might like
php简单实现批量上传图片的方法
2016/05/09 PHP
PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的区别分析
2017/07/03 PHP
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
js闭包的用途详解
2014/11/09 Javascript
Lua表达式和控制结构学习笔记
2014/12/15 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
Nodejs 发送Post请求功能(发短信验证码例子)
2017/02/09 NodeJs
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
在Swiper内如何制作CSS3动画效果示例代码
2017/12/07 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
vue实现div单选多选功能
2020/07/16 Javascript
JavaScript undefined及null区别实例解析
2020/07/21 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
python中的随机函数random的用法示例
2018/01/27 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
python pandas时序处理相关功能详解
2019/07/03 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
python跨文件使用全局变量的实现
2020/11/17 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
布鲁明戴尔百货店:Bloomingdale’s
2016/12/21 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
个人自我评价范文
2014/02/05 职场文书
标准毕业生自荐信
2014/06/24 职场文书
党建工作目标管理责任书
2015/01/29 职场文书
商务代表岗位职责
2015/02/15 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js