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函数相关推荐

  1. python nums函数_Python中的内置函数

    Python中有很多内置函数,不需要我们调用模块可以直接使用,而且都是常用函数的封装,下面我们来看看Python中的内置函数都有那些. 1.abs() abs()是绝对值函数,把一个负数转化为正数,数 ...

  2. python中len和range函数_Python中len()和range()函数

    函数:len() 1:作用:返回字符串.列表.字典.元组等长度 2:语法:len(str) 3:参数: str:要计算的字符串.列表.字典.元组等 4:返回值:字符串.列表.字典.元组等元素的长度 5 ...

  3. python list join函数_Python中join()函数多种操作代码实例

    这篇文章主要介绍了Python中join()函数多种操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python中有.join()和os ...

  4. python中如何截取字符串函数_python中如何截取字符串函数_python截取指定字符串_Python 字符串操作(string...

    在python有各种各样的string操作函数.在历史上string类在python中经历了一段轮回的历史.在最开始的时候,python有一个专门的string的module,要使用string的方法 ...

  5. python中locals函数_python中locals和globals函数

    首先,是关于名字空间的一个名词解释.是枯燥,但是很重要,所以要耐心些.Python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是一个 字典,它的键字就是变量名,字典的值就是那些变量的值.实际上, ...

  6. python字典zip函数_python中如何使用zip函数将列表合并为字典?

    python的作用很强大,列表和字典是两个不同类型的代码格式,虽然列表不能直接转换为字典,但是可以通过zip函数将列表合并为字典,实现列表转换为字典的需求.本文介绍zip函数实现列表合并为字典的原理和 ...

  7. python中execute函数_Python 中的内置函数与模块

    封面图片来源:沙沙野 内容概览 内置函数(二) 模块概念 内置函数(二) ord():输入字符找该字符编码 (Unicode) 的位置 print 2. chr():输入位置数字找出其对应的字符 pr ...

  8. python有趣的函数_Python中有趣在__call__函数

    Python中有一个有趣的语法,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的. 换句话说,我们可以把这个类型的对象当作函数来使用,相当于 重载了括号运算符. class g_d ...

  9. 解释python中的join()和split()函数_python中join和split函数

    一个是分割,一个是连接. 惯例,先看内部帮助文档 Help on method_descriptor: join(...) S.join(iterable) -> string Return a ...

最新文章

  1. java中showconfirmdialog_Java小游戏之连连看
  2. 前端如何使用proxyTable和nginx解决跨域问题
  3. HDU-2444 The Accomodation of Students
  4. 战神4 幕后花絮 概念艺术_Java 9幕后花絮:新功能从何而来?
  5. csdn飞鸽传书 打了七天七夜
  6. 使用axure的团队项目功能
  7. SpringBoot中@Email报错解决
  8. linux里面有mysql的僵尸进程_linux 如何清理僵尸进程
  9. 四川省成都市谷歌高清卫星地图下载
  10. “斗”转星移,高精度(NTP网络授时)北斗授时系统
  11. exchange2007的smtp端口更改
  12. httpwatch9.1 安装包
  13. dede分类名称_dede常用标签分类整理
  14. matlab华侨大学,范文涛
  15. C语言基础之汉语拼音读数字
  16. 输出图案(四)----输出正多边形图案:(难度系数:半颗星)
  17. 包装类中Integer类最全详解
  18. linux 下载jdk方式
  19. MySQL 报错:Error Code: 1264. Out of range value for column ‘final‘ at row 5
  20. 如何防止游戏检测出模拟器_【游戏教程】如何在模拟器运行完美世界

热门文章

  1. python二维列表的展开_python将三维数组展开成二维数组的实现
  2. android fragment 优势,Android Fragment详解
  3. 基于JAVA+SpringBoot+Mybatis+MYSQL的疫情信息分析管理系统
  4. [Luogu 3835]【模板】可持久化平衡树
  5. 关于Viual Studio 改变编辑器背景背景及背景图片(转)
  6. MyEclipse打包jar 并加入第三方包
  7. Android-01:扫描SD卡以.xxx结尾的文件
  8. [转]最长回文字符串
  9. 最近一直因为工作的事情,耽误学习了
  10. Nobot控件------拒绝机器人行为