• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python中getattr函数和hasattr函数作用详解

python 搞代码 4年前 (2022-01-07) 20次浏览 已收录 0个评论

这篇文章主要介绍了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_fil<strong style="color:transparent">来源gao@daima#com搞(%代@#码网</strong>e #自定义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函数作用详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python中getattr函数和hasattr函数作用详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址