浅谈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 字典(Dictionary)操作详解
Mar 11 Python
Python中利用sqrt()方法进行平方根计算的教程
May 15 Python
python使用reportlab实现图片转换成pdf的方法
May 22 Python
python常见排序算法基础教程
Apr 13 Python
Anaconda多环境多版本python配置操作方法
Sep 12 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
Python列表(List)知识点总结
Feb 18 Python
python实现抠图给证件照换背景源码
Aug 20 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
pycharm导入源码的具体步骤
Aug 04 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
Python中seaborn库之countplot的数据可视化使用
Jun 11 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统计时间和内存使用情况示例分享
2014/03/13 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
jQuery 使用手册(四)
2009/09/23 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
JavaScript自动设置IFrame高度的小例子
2013/06/08 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
javascript计时器编写过程与实现方法
2016/02/29 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
js图片加载效果实例代码(延迟加载+瀑布流加载)
2017/05/12 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
python实现弹跳小球
2019/05/13 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
Pandas分组与排序的实现
2019/07/23 Python
python 实现矩阵按对角线打印
2019/11/29 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
Python基于xlrd模块处理合并单元格
2020/07/28 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
matplotlib部件之套索Lasso的使用
2021/02/24 Python
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
学习十八大精神心得体会
2013/12/31 职场文书
学生会个人自荐书范文
2014/02/12 职场文书
建国大业观后感
2015/06/01 职场文书
学校运动会简讯
2015/07/20 职场文书
新郎婚礼致辞
2015/07/27 职场文书
实验室安全管理制度
2015/08/05 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
Python list列表删除元素的4种方法
2021/11/01 Python