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模块,需事先存在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() 等,我们可以还可以做出很多有趣的事情。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2286484.html

(0)
上一篇 2025年2月27日 22:04:55
下一篇 2025年2月19日 05:00:11

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python的Flask框架中集成CKeditor富文本编辑器的教程

    ckeditor是目前最优秀的可见即可得网页编辑器之一,它采用javascript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多web项目和大型网站均采用了cked…

    编程技术 2025年2月27日
    200
  • Python模块包中__init__.py文件功能分析

    本文实例讲述了python模块包中__init__.py文件功能。分享给大家供大家参考,具体如下: 用django做开发已经一年多的时间,但基本没注意python模块中__init__.py文件存在的意义,偶然看到对它的介绍吓一大跳,这个文…

    编程技术 2025年2月27日
    200
  • Python计算字符宽度的方法

    本文实例讲述了python计算字符宽度的方法。分享给大家供大家参考,具体如下: 最近在用python写一个CLI小程序,其中涉及到计算字符宽度,目标是以友好的方式将一个长字符串截取为等宽的片段。 对于unicode字符,python的len…

    编程技术 2025年2月27日
    200
  • Python中文分词实现方法(安装pymmseg)

    本文实例讲述了python中文分词实现方法。分享给大家供大家参考,具体如下: 在Python这pymmseg-cpp 还是十分方便的! 环境 ubuntu10.04 , python2.65 步骤: 1 下载mmseg-cpp的源代码 ht…

    编程技术 2025年2月27日
    200
  • Python找出list中最常出现元素的方法

    本文实例讲述了python找出list中最常出现元素的方法。分享给大家供大家参考,具体如下: 假设一个list中保存着各种元素,需要统计每个元素出现的个数,并打印出最常出现的前三个元素分别是什么。list如下: 复制代码 代码如下:word…

    编程技术 2025年2月27日
    200
  • python中根据字符串调用函数的实现方法

    在python中可以根据字符串来调用函数: 1、使用getattr从字符串来调用函数 在多进程中,可能传递过来的是一个字符串,那么我怎么来调用一个已经存在的函数呢,主要就是使用到getattr函数的作用,这个函数就是在使用字符串得到这个字符…

    编程技术 2025年2月27日
    200
  • Python中列表元素转为数字的方法分析

    本文实例讲述了python中列表元素转为数字的方法。分享给大家供大家参考,具体如下: 有一个数字字符的列表: numbers = [‘1’, ‘5’, ’10’, ‘8’] 登录后复制 想要把每个元素转换为数字: numbers = [1,…

    编程技术 2025年2月27日
    200
  • python中函数总结之装饰器闭包详解

    1、前言 函数也是一个对象,从而可以增加属性,使用句点来表示属性。 如果内部函数的定义包含了在外部函数中定义的对象的引用(外部对象可以是在外部函数之外),那么内部函数被称之为闭包。 2、装饰器 装饰器就是包装原来的函数,从而在不需要修改原来…

    编程技术 2025年2月27日
    200
  • python实现中文转换url编码的方法

    本文实例讲述了python实现中文转换url编码的方法。分享给大家供大家参考,具体如下: 今天要处理百度贴吧的东西。想要做一个关键词的list,每次需要时,直接添加 到list里面就可以了。但是添加到list里面是中文的情况(比如‘丽江&#…

    编程技术 2025年2月27日
    200
  • Python备份目录及目录下的全部内容的实现方法

    本来是想写一个东西可以直接调用tortoisesvn保存当前代码到一个分枝下的。 可惜调用SVN的部分还在研究。就先写了目录拷贝的部分。 如果有喜欢研究Python的童鞋愿意提供想法或者建议的话, 这里先谢谢了。 :) 就目录拷贝的部分,思…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论