浅谈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批量制作雷达图的实现方法
Jul 26 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
和孩子一起学习python之变量命名规则
May 27 Python
python爬虫之线程池和进程池功能与用法详解
Aug 02 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
python虚拟环境模块venv使用及示例
Mar 04 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
详解在Python中使用Torchmoji将文本转换为表情符号
Jul 27 Python
python爬虫筛选工作实例讲解
Nov 23 Python
Python+Xlwings 删除Excel的行和列
Dec 19 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 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结合AjaxFileUploader实现无刷新文件上传的方法
2014/10/29 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
jquery 图片Silhouette Fadeins渐显效果
2010/02/07 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
js实现div层缓慢收缩与展开的方法
2015/05/11 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
深入理解Node module模块
2018/03/26 Javascript
详解如何配置vue-cli3.0的vue.config.js
2018/08/23 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
详解Python的Django框架中的通用视图
2015/05/04 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
python爬虫实现获取下一页代码
2020/03/13 Python
python使用建议技巧分享(三)
2020/08/18 Python
python 模拟登陆github的示例
2020/12/04 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
小学生环保标语
2014/06/13 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python