Python自学笔记一、反射

来源:互联网 发布:如何做淘宝店铺 编辑:程序博客网 时间:2024/06/06 00:02

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

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

commons.pydef 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.commonsfrom lib.test import commons#用__import__方式,有多级目录时fromlist=True:r=__import__('lib.test.commons', fromlist=True)

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

index.pyinp=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.pyinp=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 rsetattr(commons,'AGE',18)r=hasattr(commons,'AGE')print r#False#True

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

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

0 0