浅谈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 13 Python
详细解析Python中__init__()方法的高级应用
May 11 Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 Python
python2.6.6如何升级到python2.7.14
Apr 08 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
python3人脸识别的两种方法
Apr 25 Python
python远程邮件控制电脑升级版
May 23 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 Python
Python中文分词库jieba,pkusegwg性能准确度比较
Feb 11 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Pytorch生成随机数Tensor的方法汇总
Sep 09 Python
python基于opencv实现人脸识别
Jan 04 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源代码数组统计count分析
2011/08/02 PHP
解析php框架codeigniter中如何使用框架的session
2013/06/24 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
JavaScript数据结构和算法之图和图算法
2015/02/11 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
微信小程序 教程之WXSS
2016/10/18 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
2017/04/04 jQuery
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
python fabric实现远程部署
2017/01/05 Python
Django 使用logging打印日志的实例
2018/04/28 Python
python leetcode 字符串相乘实例详解
2018/09/03 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
区分python中的进程与线程
2020/08/13 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
食堂员工工作职责
2013/12/18 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
销售员态度差检讨书
2014/10/26 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
redis实现的四种常见限流策略
2021/06/18 Redis
SQLServer之常用函数总结详解
2021/08/30 SQL Server
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers