浅谈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中的getattr函数 hasattr函数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python写的ARP攻击代码实例
Jun 04 Python
python Django批量导入数据
Mar 25 Python
python之Character string(实例讲解)
Sep 25 Python
python机器学习实战之K均值聚类
Dec 20 Python
python3.x实现发送邮件功能
May 22 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
python 错误处理 assert详解
Apr 20 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
May 23 Python
Python实现像awk一样分割字符串
Sep 15 Python
python 实现压缩和解压缩的示例
Sep 22 Python
Python+uiautomator2实现自动刷抖音视频功能
Apr 29 Python
深入解析Python中的线程同步方法
Jun 14 #Python
详解Python中的Descriptor描述符类
Jun 14 #Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 #Python
Python中getattr函数和hasattr函数作用详解
Jun 14 #Python
Python模块包中__init__.py文件功能分析
Jun 14 #Python
Python计算字符宽度的方法
Jun 14 #Python
Python中文分词实现方法(安装pymmseg)
Jun 14 #Python
You might like
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
PHP文件操作方法汇总
2015/07/01 PHP
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
深入理解JS中的substr和substring
2016/04/26 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
详解nvm管理多版本node踩坑
2019/07/26 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
python将图片转base64,实现前端显示
2020/01/09 Python
Django media static外部访问Django中的图片设置教程
2020/04/07 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
详解python 内存优化
2020/08/17 Python
天网面试题
2013/04/07 面试题
行政经理岗位职责
2013/11/09 职场文书
四个太阳教学反思
2014/02/01 职场文书
教堂婚礼主持词
2014/03/14 职场文书
五四青年节演讲稿
2014/05/26 职场文书
初三毕业评语
2014/12/26 职场文书
大雁塔英文导游词
2015/02/10 职场文书
2015年公务员工作总结
2015/04/24 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python