浅谈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浅拷贝、深拷贝及引用机制
Dec 15 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
在python中将字符串转为json对象并取值的方法
Dec 31 Python
Python装饰器限制函数运行时间超时则退出执行
Apr 09 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
Python使用configparser库读取配置文件
Feb 22 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
浅析Python 多行匹配模式
Jul 24 Python
用python实现学生管理系统
Jul 24 Python
Python如何急速下载第三方库详解
Nov 02 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 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 htmlspecialchars加强版
2010/02/16 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
JavaScript常用代码书写规范的超全面总结
2016/09/11 Javascript
AngularJS指令中的绑定策略实例分析
2016/12/14 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
vue.js如何将echarts封装为组件一键使用详解
2017/10/10 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
微信小程序和百度的语音识别接口详解
2019/05/06 Javascript
js实现简单扫雷
2020/11/27 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Python的time模块中的常用方法整理
2015/06/18 Python
Python读取word文本操作详解
2018/01/22 Python
Python hashlib模块实例使用详解
2019/12/24 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
Flask处理Web表单的实现方法
2021/01/31 Python
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
洛佩桑酒店官方网站:Lopesan Hotels
2019/04/15 全球购物
List、Map、Set三个接口,存取元素时,各有什么特点?
2015/09/27 面试题
JAVA和C++的区别
2013/10/06 面试题
命名空间(namespace)和程序集(Assembly)有什么区别
2015/09/25 面试题
艺术学院毕业生求职信
2014/07/09 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
2016年教师师德师风心得体会
2016/01/12 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis