Python--详细讲解反射has|get|set|delattr

1.反射(内置函数hasattr,getattr,setattr,delattr)

 1)神赐给你的内置函数 :

a: getattr(命名空间,'函数名') == 命名空间.属性名; 这里的命名空间指的是对象或者类;

b: getattr四个应用场景: 

  1)类名.名字 <==> getattr(类名,'名字')
  2)对象名.名字 <==> getattr(对象名,'名字')
  3)模块名.名字 <==> getattr(模块名,'名字')
  4)自己文件名.名字 <==> getattr(自己文件名,'名字')

c:getattr的天命圈

**getattr(命名空间,'函数名',默认值参数)这个默认值参数就很强大,getattr会先找指定成员,如果存在

则返回成员引用,否则返回默认值参数;但是你如果不传默认值参数,如果找不到会报错(它与hasttr异常处理的区别见下边解释)

所以总结来说,getattr就是把你用小数点调用的方式转换为getattr(命名空间,‘静态变量名/动态变量名)

2)hasattr():

a:功能指定对象中是否含有指定成员,有则返回True,否则返回False;

b:格式:hasattr(指定对象空间,变量名)

imp = input('>>>:')
imp_module = __import__(imp)
while 1:
    fun_name = input('>>>:')                    
    func = getattr(imp_module,fun_name,True)    #如果找不到,则返回默认参数
    if func == True:                            #对找不到的情况处理
        print('重新输入!')
        continue
    else:
        a = func()
        print(a)


imp = input('>>>:')
imp_module = __import__(imp)
while 1:
    fun_name = input('>>>:')
    ret = hasattr(imp_module, fun_name)     #查看指定对象里的情况,如果没有返回False
    if ret == True:                            #对找不到的情况处理
        func = getattr(imp_module,fun_name)
        a = func()
        print(len(a))
    else:
        print('重新输入!')
        continue

第一段程序是利用默认值  第二段是利用hasattr(后者是对指定对象空间处理,比较精准)

3)setattr():

a: 功能:给指定对象添加指定成员

b:格式:setattr(对象空间,要改的变量名,新值)

4)delattr()

a:功能删除指定对象中的指定成员

b:格式delattr(对象空间,变量名)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值