浅谈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代码实例
Feb 04 Python
python学习教程之使用py2exe打包
Sep 24 Python
python爬虫基本知识
Mar 05 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
Python中一些深不见底的“坑”
Jun 12 Python
Python考拉兹猜想输出序列代码实践
Jul 05 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
Jul 31 Python
后端开发使用pycharm的技巧(推荐)
Mar 27 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
Mar 30 Python
如何以Winsows Service方式运行JupyterLab
Aug 30 Python
python zip()函数的使用示例
Sep 23 Python
快速创建python 虚拟环境
Nov 28 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
有关phpmailer的详细介绍及使用方法
2013/01/28 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP抽奖算法程序代码分享
2015/10/08 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
js评分组件使用详解
2017/06/06 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
关于JS解构的5种有趣用法
2019/09/05 Javascript
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
Python中方法链的使用方法
2016/02/23 Python
Python做简单的字符串匹配详解
2017/03/21 Python
Python异常处理操作实例详解
2018/05/10 Python
解决Python plt.savefig 保存图片时一片空白的问题
2019/01/10 Python
Python函数中不定长参数的写法
2019/02/13 Python
Python内置类型性能分析过程实例
2020/01/29 Python
通过python检测字符串的字母
2020/02/18 Python
详解移动端h5页面根据屏幕适配的四种方案
2020/04/15 HTML / CSS
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
毕业生多媒体设计求职信
2013/10/12 职场文书
汽车技术服务与营销专业推荐信
2013/11/29 职场文书
职业技术学校毕业生推荐信
2013/12/03 职场文书
餐饮业的创业计划书范文
2013/12/26 职场文书
家长会邀请书
2014/01/25 职场文书
小平您好观后感
2015/06/09 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书
MySQL sql_mode的使用详解
2021/05/08 MySQL
javascript之Object.assign()的痛点分析
2022/03/03 Javascript