浅谈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中的__future__模块
Apr 27 Python
python 基础教程之Map使用方法
Jan 17 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
django从请求到响应的过程深入讲解
Aug 01 Python
python实现文本界面网络聊天室
Dec 12 Python
详解Python函数式编程—高阶函数
Mar 29 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
Python高阶函数与装饰器函数的深入讲解
Nov 10 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 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写UltraEdit插件脚本实现方法
2011/12/26 PHP
PHP的简易冒泡法代码分享
2012/08/28 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
理解javascript闭包
2015/12/15 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
vue.js简单配置axios的方法详解
2017/12/13 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
JS面向对象编程实现的Tab选项卡案例详解
2020/03/03 Javascript
python打开网页和暂停实例
2014/09/30 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
在echarts中图例legend和坐标系grid实现左右布局实例
2020/05/16 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
Pandas对每个分组应用apply函数的实现
2020/12/13 Python
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
优秀导游先进事迹材料
2014/01/25 职场文书
太太口服液广告词
2014/03/20 职场文书
新学期开学演讲稿
2014/05/24 职场文书
课内比教学心得体会
2014/09/09 职场文书
如何写新闻稿
2015/07/18 职场文书
Django开发RESTful API实现增删改查(入门级)
2021/05/10 Python
微信小程序APP页面的之间的相互传递参数以及自定义组件
2022/04/19 Javascript