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', )
#     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可以删除某个对象中的成员。

你可能感兴趣的:(Python)