浅谈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 命令行非阻塞输入的小例子
Sep 27 Python
Python实现类继承实例
Jul 04 Python
Python实现拷贝多个文件到同一目录的方法
Sep 19 Python
浅析Python中yield关键词的作用与用法
Nov 29 Python
win10下python3.5.2和tensorflow安装环境搭建教程
Sep 19 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
浅析Python3 pip换源问题
Jan 06 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 Python
Python中第三方库Faker的使用详解
Apr 02 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
ThinkPHP中关联查询实例
2014/12/02 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
一个原生的用户等级的进度条
2010/07/03 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
jQuery stop()用法实例详解
2016/07/28 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
Python使用MONGODB入门实例
2015/05/11 Python
Python中在for循环中嵌套使用if和else语句的技巧
2016/06/20 Python
python实现获取Ip归属地等信息
2016/08/27 Python
Python开发的实用计算器完整实例
2017/05/10 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
python操作kafka实践的示例代码
2019/06/19 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
10分钟理解CSS3 Grid布局
2018/12/20 HTML / CSS
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
应届生法律求职信
2013/10/22 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
小学四年级学生评语
2014/12/26 职场文书
2015年高三年级组工作总结
2015/07/21 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL