浅谈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中的True,False条件判断实例分析
Jan 12 Python
python数据结构之图的实现方法
Jul 08 Python
python django 增删改查操作 数据库Mysql
Jul 27 Python
python爬虫基本知识
Mar 05 Python
python 批量修改/替换数据的实例
Jul 25 Python
python list转置和前后反转的例子
Aug 26 Python
利用python计算时间差(返回天数)
Sep 07 Python
jupyter notebook实现显示行号
Apr 13 Python
Python自动发送和收取邮件的方法
Aug 12 Python
python 制作本地应用搜索工具
Feb 27 Python
基于Python实现一个春节倒计时脚本
Jan 22 Python
Python socket如何解析HTTP请求内容
Feb 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中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
深入file_get_contents与curl函数的详解
2013/06/25 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
Javascript之文件操作
2007/03/07 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
2015/09/14 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
2016/06/08 Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
2016/08/24 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
[01:06] DOTA2英雄背景故事第三期之秩序法则光之守卫
2020/07/07 DOTA
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
Python 3.x基于Xml数据的Http请求方法
2018/12/28 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例
2019/01/23 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
请说出以下代码输出什么
2013/08/30 面试题
自我评价范文
2013/12/22 职场文书
银行简历自我评价
2014/02/11 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
青蓝工程实施方案
2014/03/27 职场文书
给老婆的保证书范文
2014/04/28 职场文书
英文慰问信范文
2015/03/24 职场文书
烈士陵园观后感
2015/06/08 职场文书
Python使用DFA算法过滤内容敏感词
2022/04/22 Python