浅谈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创建文件和追加文件内容实例
Oct 21 Python
python使用三角迭代计算圆周率PI的方法
Mar 20 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 Python
python print 按逗号或空格分隔的方法
May 02 Python
Python动态导入模块的方法实例分析
Jun 28 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
使用python实现mqtt的发布和订阅
May 05 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
python实现微信小程序用户登录、模板推送
Aug 28 Python
使用Python爬取Json数据的示例代码
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开发中四种查询返回结果分析
2011/01/02 PHP
8个必备的PHP功能实例代码
2013/10/27 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
JavaScript 继承的实现
2009/07/09 Javascript
jquery 读取页面load get post ajax 四种方式代码写法
2011/04/02 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
js跨域问题浅析及解决方法优缺点对比
2014/11/08 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
js的三种继承方式详解
2017/01/21 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
详解node.js 下载图片的 2 种方式
2018/03/02 Javascript
深入理解javascript prototype的相关知识
2019/09/19 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
在vue中使用echarts(折线图的demo,markline用法)
2020/07/20 Javascript
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
python url 参数修改方法
2018/12/26 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
英国第一家领先的在线处方眼镜零售商:Glasses Direct
2018/02/23 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
电信专业应届生自荐信
2013/09/28 职场文书
中国入世承诺
2014/04/01 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
小学运动会开幕词
2016/03/04 职场文书
导游词之山东八大关
2019/12/18 职场文书
Python打包为exe详细教程
2021/05/18 Python
Java使用Unsafe类的示例详解
2021/09/25 Java/Android