python中getattr函数 hasattr函数

简介: 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() 等,我们可以还可以做出很多有趣的事情。


相关文章
|
17天前
|
开发者 Python 容器
python函数基础以及函数参数简解
python函数基础以及函数参数简解
|
10天前
|
Python
python 函数
【9月更文挑战第4天】python 函数
33 5
WK
|
17天前
|
Python
python中的函数有哪些种类?
在 Python 中,函数根据定义方式、用途及来源可分为多种类型:自带的内置函数(如 print(), len())无需导入直接使用;标准库函数需导入相应模块后使用;第三方库函数则需先安装库再导入使用;用户自定义函数可根据需求定义并多次调用;匿名函数(lambda)无函数名,常用于需要函数对象但不想单独定义的情形;高阶函数接受或返回函数;装饰器函数可在不改动原函数代码情况下为其添加新功能;生成器函数使用 yield 逐个返回值;递归函数在自身定义中调用自身;嵌套函数在一个函数内定义,可访问外部函数变量。各种函数类型在编程中有不同的用途和优势。
WK
38 12
|
16天前
|
Python
Python 中 help() 和 dir() 函数的用法
【8月更文挑战第29天】
18 5
|
17天前
|
Python
12类常用的Python函数
12类常用的Python函数
|
17天前
|
算法 Python
python函数递归和生成器
python函数递归和生成器
|
16天前
|
Python
Python eval()函数的使用
Python eval()函数的使用
15 1
|
17天前
|
Python
python常用内置函数
python常用内置函数
|
18天前
|
算法 Python
python常见的函数使用
【8月更文挑战第27天】python常见的函数使用
14 2
|
18天前
|
分布式计算 索引 Python
8个超好用的Python内置函数,提升效率必备!
8个超好用的Python内置函数,提升效率必备!