浅谈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解释器相关安装方法
Oct 12 Python
Python Requests 基础入门
Apr 07 Python
Python的re模块正则表达式操作
May 25 Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
pandas 空的dataframe 插入列名的示例
Oct 30 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
Mar 23 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
Python Django框架介绍之模板标签及模板的继承
May 27 Python
pytorch分类模型绘制混淆矩阵以及可视化详解
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
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
利用JQuery制作符合Web标准的QQ弹出消息
2014/01/14 Javascript
SuperSlide标签切换、焦点图多种组合插件
2015/03/14 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
vue.js实现双击放大预览功能
2020/06/23 Javascript
python实现web方式logview的方法
2015/08/10 Python
深入理解NumPy简明教程---数组2
2016/12/17 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
Python之时间和日期使用小结
2019/02/14 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
Python流程控制 if else实现解析
2019/09/02 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
采购文员岗位职责
2013/11/20 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
合伙经营协议书范本
2014/04/18 职场文书
个人收入证明模板
2014/09/18 职场文书
建国大业观后感
2015/06/01 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
如何用JS实现简单的数据监听
2021/05/06 Javascript
Python中zipfile压缩包模块的使用
2021/05/14 Python
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏