浅谈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进阶教程之动态类型详解
Aug 30 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Python中模块string.py详解
Mar 12 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
Nov 15 Python
Python 查看文件的读写权限方法
Jan 23 Python
wxPython之wx.DC绘制形状
Nov 19 Python
Python函数的默认参数设计示例详解
Dec 01 Python
python创建n行m列数组示例
Dec 02 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
python pillow库的基础使用教程
Jan 13 Python
python使用BeautifulSoup 解析HTML
Apr 24 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 中的str_replace 函数总结
2007/04/27 PHP
php新建文件自动编号的思路与实现
2011/06/27 PHP
PHP flock 文件锁详细介绍
2012/12/29 PHP
fckeditor上传文件按日期存放及重命名方法
2015/05/22 PHP
详谈PHP编码转换问题
2015/07/28 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
php使用scandir()函数扫描指定目录下所有文件示例
2019/06/08 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
JS 实现双色表格实现代码
2009/11/24 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
介绍Python中内置的itertools模块
2015/04/29 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
英国性感内衣和睡衣品牌:Bluebella
2018/01/26 全球购物
Cinque网上商店:德国服装品牌
2019/03/17 全球购物
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
秋季运动会表扬稿
2014/01/16 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
社区党员群众路线教育实践活动心得体会
2014/11/03 职场文书
解除租房协议书
2014/12/03 职场文书
求职推荐信范文
2015/03/27 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
撤诉状格式范本
2015/05/19 职场文书
八年级作文之我的母亲
2019/12/10 职场文书