浅谈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 sys模块sys.path使用方法示例
Dec 04 Python
Python中的异常处理学习笔记
Jan 28 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
Sanic框架安装与简单入门示例
Jul 16 Python
django从请求到响应的过程深入讲解
Aug 01 Python
在python中获取div的文本内容并和想定结果进行对比详解
Jan 02 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
Feb 15 Python
python实现在线翻译功能
Mar 03 Python
python3列表删除大量重复元素remove()方法的问题详解
Jan 04 Python
详解使用python爬取抖音app视频(appium可以操控手机)
Jan 26 Python
python实现高效的遗传算法
Apr 07 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框架实现session跨域问题的解决方法
2014/07/01 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
php使用Jpgraph创建折线图效果示例
2017/02/15 PHP
php常用字符串查找函数strstr()与strpos()实例分析
2019/06/21 PHP
JQUERY获取form表单值的代码
2010/07/17 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
JavaScript拆分字符串时产生空字符的解决方案
2014/09/26 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
利用Node.js如何实现文件循环覆写
2019/04/05 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
使用Python的PEAK来适配协议的教程
2015/04/14 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
pandas通过loc生成新的列方法
2018/11/28 Python
python为什么会环境变量设置不成功
2020/06/23 Python
利用python 读写csv文件
2020/09/10 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
Python爬虫之Selenium实现关闭浏览器
2020/12/04 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
记帐员岗位责任制
2014/02/08 职场文书
物理学专业求职信
2014/07/04 职场文书
12.4法制宣传日活动总结
2014/08/26 职场文书
股指期货心得体会
2014/09/10 职场文书
工资收入证明
2014/10/07 职场文书
先进员工事迹材料
2014/12/20 职场文书
教导主任个人总结
2015/03/03 职场文书
部门2015年度工作总结
2015/04/29 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
再谈python_tkinter弹出对话框创建
2022/03/20 Python
mysql sock文件存储了什么信息
2022/07/15 MySQL