浅谈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创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
python 布尔操作实现代码
Mar 23 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
Win8下python3.5.1安装教程
Jul 29 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
Python使用import导入本地脚本及导入模块的技巧总结
Aug 07 Python
python中Lambda表达式详解
Nov 20 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
opencv 图像腐蚀和图像膨胀的实现
Jul 07 Python
Python之matplotlib绘制饼图
Apr 13 Python
Python代码实现双链表
May 25 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入门速成教程
2007/03/19 PHP
PHP Token(令牌)设计
2008/03/15 PHP
PHP中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
PHP基本语法总结
2014/09/06 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
javascript常用的方法整理
2015/08/20 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
Python发送Email方法实例
2014/08/21 Python
Python模拟登录12306的方法
2014/12/30 Python
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
Python 基于FIR实现Hilbert滤波器求信号包络详解
2020/02/26 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
韩国11街:11STREET
2018/03/27 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
前台文员的岗位职责
2013/11/14 职场文书
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
合作协议书格式
2014/08/19 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
教师教育教学随笔
2015/08/15 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
导游词之山海关
2019/12/10 职场文书