Python自学笔记一、反射

反射:根据字符串的形式去对象中操作其成员。

1,通过字符串的形式,导入模块

commons.py
def f1():
    print 'f1'
def f2():
    print 'f2'
def f3():
    print 'f3'
index.py

#根据用户输入的内容导入模块``

inp=raw_input('请输入模块:')

print(inp,type(inp))

com=__import__(inp)
com.f1()

#输入:commons
#结果:('commons', <type 'str'>)
#     f1

这段代码的功能就是通过字符串的形式导入模块,其中最重要的就是内置import方法,我们传入的’commons‘赋值给inp,通过import方法,此时com可以视为import commons,此时执行f1就可以得到结果。
另外:import可以导入嵌套的模块,比如一个文件lib中含有test,test中含有comnons模块。这里我们可以通:`

impor lib.test.commons
from lib.test import commons
#用__import__方式,有多级目录时fromlist=True:
r=__import__('lib.test.commons', fromlist=True)

2,通过字符串的形式,调用模块中指定的函数

index.py
inp=input('请输入模块:')

com=__import__(inp)

inp_func=raw_input('请输入要执行的函数:')

target_func=getattr(com,inp_func)`
result=target_func()
#输入:commons
#输入:f1
#输出:f1

通过getattr,可以进入com模块中寻找inp_func函数,当然不仅限于函数,模块中的对象都可以,例如commons中的全局变量。

hasattr,根据字符串的形式去模块中判断对象是否存在。

index.py
inp=input('请输入模块:')

com=__import__(inp)

inp_func=raw_input('请输入要执行的函数:')

target_func=hasattr(com,inp_func)`
print target_func
#输入:commons
#输入:s
#输出:False

setattr,可以通过字符串的形式进行设置。

r=hasattr(commons,'AGE')
print r
setattr(commons,'AGE',18)
r=hasattr(commons,'AGE')
print r
#False
#True

delattr可以删除模块中的对象。

总结:import 用字符串的形式导入模块;getattr以字符串的形式去某个模块中寻找函数,加上()表示执行函数;hasattr可以判断某个对象中是否有某个成员;serattr可以设置某个对象中的成员;delattr可以删除某个对象中的成员。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值