浅谈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实现电子词典
Apr 23 Python
python基础教程之字典操作详解
Mar 25 Python
python3生成随机数实例
Oct 20 Python
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
Oct 23 Python
Python3使用requests发闪存的方法
May 11 Python
[原创]教女朋友学Python(一)运行环境搭建
Nov 29 Python
使用pycharm生成代码模板的实例
May 23 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
Aug 07 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
python,Java,JavaScript实现indexOf
Sep 09 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
Oct 21 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
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
PHP中改变图片的尺寸大小的代码
2011/07/17 PHP
php安全配置 如何配置使其更安全
2011/12/16 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
php抽象类使用要点与注意事项分析
2015/02/09 PHP
php比较两个字符串长度的方法
2015/07/13 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
jquery延迟加载外部js实现代码
2013/01/11 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
移动端js图片查看器
2016/11/17 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
Python列表(list)常用操作方法小结
2015/02/02 Python
python中Flask框架简单入门实例
2015/03/21 Python
进一步探究Python中的正则表达式
2015/04/28 Python
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
Python代码太长换行的实现
2019/07/05 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
应届生如何写自荐信
2014/01/05 职场文书
“三支一扶”支教教师思想汇报
2014/09/13 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
教育读书笔记
2015/07/02 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
vue如何批量引入组件、注册和使用详解
2021/05/12 Vue.js