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 相关文章推荐
在python的WEB框架Flask中使用多个配置文件的解决方法
Apr 18 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
python使用pycharm环境调用opencv库
Feb 11 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
python处理两种分隔符的数据集方法
Dec 12 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
django 微信网页授权认证api的步骤详解
Jul 30 Python
pytorch动态网络以及权重共享实例
Jan 06 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 Python
Python模块包中__init__.py文件功能分析
Jun 14 #Python
Python计算字符宽度的方法
Jun 14 #Python
Python中文分词实现方法(安装pymmseg)
Jun 14 #Python
Python找出list中最常出现元素的方法
Jun 14 #Python
Python中列表元素转为数字的方法分析
Jun 14 #Python
python实现中文转换url编码的方法
Jun 14 #Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 #Python
You might like
php遍历数组的方法分享
2012/03/22 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
又一个PHP实现的冒泡排序算法分享
2014/08/21 PHP
php查询操作实现投票功能
2016/05/09 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
H5 js点击按钮复制文本到粘贴板
2020/11/19 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
Python探索之URL Dispatcher实例详解
2017/10/28 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
2019/07/04 Python
利用python实现汉字转拼音的2种方法
2019/08/12 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
粉红色的鲸鱼:Vineyard Vines
2018/02/17 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
C语言笔试题回忆
2015/04/02 面试题
医院检讨书范文
2014/02/01 职场文书
英文演讲稿
2014/05/15 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
村创先争优活动总结
2014/08/28 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
pytorch 带batch的tensor类型图像显示操作
2021/05/20 Python
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js