python getattr函数_python中getattr函数 hasattr函数
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模块,需事先存在
defrun():whileTrue:
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()函数去动态加载模块呢?当然可以啦
请看示例:
defrun():whileTrue:
cs=input('请输入:')
v,k=cs.split('/') #获得输入的模块和模块的方法
obj=__import__('lib.'+v,fromlist=True) #调用lib目录下的模块fromlist=True按路径连接的方式导入
ifhasattr(obj,k):
f=getattr(obj,k)
f()else:print('404')if __name__ == '__main__':
run()
是不是感到getattr很强大啊。其实,getattr()就是实现python反射的一块积木,结合其它方法如setattr(),dir() 等,我们可以还可以做出很多有趣的事情。
python getattr函数_python中getattr函数 hasattr函数相关推荐
- python nums函数_Python中的内置函数
Python中有很多内置函数,不需要我们调用模块可以直接使用,而且都是常用函数的封装,下面我们来看看Python中的内置函数都有那些. 1.abs() abs()是绝对值函数,把一个负数转化为正数,数 ...
- python中len和range函数_Python中len()和range()函数
函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数: str:要计算的字符串.列表.字典.元组等 4:返回值:字符串.列表.字典.元组等元素的长度 5 ...
- python list join函数_Python中join()函数多种操作代码实例
这篇文章主要介绍了Python中join()函数多种操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python中有.join()和os ...
- python中如何截取字符串函数_python中如何截取字符串函数_python截取指定字符串_Python 字符串操作(string...
在python有各种各样的string操作函数.在历史上string类在python中经历了一段轮回的历史.在最开始的时候,python有一个专门的string的module,要使用string的方法 ...
- python中locals函数_python中locals和globals函数
首先,是关于名字空间的一个名词解释.是枯燥,但是很重要,所以要耐心些.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个 字典,它的键字就是变量名,字典的值就是那些变量的值.实际上, ...
- python字典zip函数_python中如何使用zip函数将列表合并为字典?
python的作用很强大,列表和字典是两个不同类型的代码格式,虽然列表不能直接转换为字典,但是可以通过zip函数将列表合并为字典,实现列表转换为字典的需求.本文介绍zip函数实现列表合并为字典的原理和 ...
- python中execute函数_Python 中的内置函数与模块
封面图片来源:沙沙野 内容概览 内置函数(二) 模块概念 内置函数(二) ord():输入字符找该字符编码 (Unicode) 的位置 print 2. chr():输入位置数字找出其对应的字符 pr ...
- python有趣的函数_Python中有趣在__call__函数
Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的. 换句话说,我们可以把这个类型的对象当作函数来使用,相当于 重载了括号运算符. class g_d ...
- 解释python中的join()和split()函数_python中join和split函数
一个是分割,一个是连接. 惯例,先看内部帮助文档 Help on method_descriptor: join(...) S.join(iterable) -> string Return a ...
最新文章
- java中showconfirmdialog_Java小游戏之连连看
- 前端如何使用proxyTable和nginx解决跨域问题
- HDU-2444 The Accomodation of Students
- 战神4 幕后花絮 概念艺术_Java 9幕后花絮:新功能从何而来?
- csdn飞鸽传书 打了七天七夜
- 使用axure的团队项目功能
- SpringBoot中@Email报错解决
- linux里面有mysql的僵尸进程_linux 如何清理僵尸进程
- 四川省成都市谷歌高清卫星地图下载
- “斗”转星移,高精度(NTP网络授时)北斗授时系统
- exchange2007的smtp端口更改
- httpwatch9.1 安装包
- dede分类名称_dede常用标签分类整理
- matlab华侨大学,范文涛
- C语言基础之汉语拼音读数字
- 输出图案(四)----输出正多边形图案:(难度系数:半颗星)
- 包装类中Integer类最全详解
- linux 下载jdk方式
- MySQL 报错:Error Code: 1264. Out of range value for column ‘final‘ at row 5
- 如何防止游戏检测出模拟器_【游戏教程】如何在模拟器运行完美世界
热门文章
- python二维列表的展开_python将三维数组展开成二维数组的实现
- android fragment 优势,Android Fragment详解
- 基于JAVA+SpringBoot+Mybatis+MYSQL的疫情信息分析管理系统
- [Luogu 3835]【模板】可持久化平衡树
- 关于Viual Studio 改变编辑器背景背景及背景图片(转)
- MyEclipse打包jar 并加入第三方包
- Android-01:扫描SD卡以.xxx结尾的文件
- [转]最长回文字符串
- 最近一直因为工作的事情,耽误学习了
- Nobot控件------拒绝机器人行为