Python中getattr函数和hasattr函数作用详解
作者:百衲本 时间:2022-10-29 15:42:11
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() 等,我们可以还可以做出很多有趣的事情。
标签:python,getattr,hasattr
0
投稿
猜你喜欢
关于Python函数对象的名称空间和作用域
2023-08-15 02:00:42
详解Python用户登录接口的方法
2021-10-09 23:26:48
Pandas常用累计、同比、环比等统计方法实践过程
2021-03-13 01:48:36
python计算导数并绘图的实例
2023-01-19 21:16:51
用Python将动态GIF图片倒放播放的方法
2023-02-17 07:39:51
Golang优雅保持main函数不退出的办法
2023-07-12 21:15:54
php面象对象数据库操作类实例
2023-10-13 22:33:05
Python的运算符重载详解
2022-08-19 21:51:52
python抓取网页内容示例分享
2022-04-25 19:02:56
XHTML代码的基本应用
2007-10-26 12:32:00
python使用Matplotlib绘制分段函数
2022-04-17 16:07:17
mysql installer community 8.0.12.0安装图文教程
2024-01-15 05:16:33
windows下MySQL5.6版本安装及配置过程附有截图和详细说明
2024-01-13 18:58:56
SQL Server 2019自定义安装教程
2024-01-12 21:14:22
Python操作redis和mongoDB的方法
2023-01-01 17:06:34
Python全栈之学习JS(1)
2021-09-30 03:43:23
一个SQL语句获得某人参与的帖子及在该帖得分总和
2024-01-27 07:17:53
jupyter notebook 重装教程
2022-07-20 09:38:02
Python NumPy随机抽模块介绍及方法
2021-04-21 16:47:03
微信公众平台实现获取用户OpenID的方法
2023-11-17 05:55:56