一、反射:根据字符串的形式去对象(某个模块)中去操作成员
通过字符串的形式,导入模块
通过字符串的形式,去模块中寻找指定的函数,并执行
1.__import__:用于字符串的形似执行导入模块
inp=input("请输入模块名:") #print(inp,type(inp))
#__import__用于字符串的形似执行导入模块 dd=__import__(inp)
|
2.getattr:用于字符串的形式去某个模块中寻找函数
imp=input("请输入执行的函数名称:") #getattr 用于字符串的形式去某个模块中寻找函数 f=getattr(dd,imp,None)
#在获取到的函数名后加(),执行函数 #print(f,f())
|
3.hasattr()根据字符串的形式去某个模块中判断东西是否存在
r=hasattr(dd,imp) print(r)
|
4.setattr(obj,name,value):根据字符串的形式去某个模块中设置东西(创建于内存中)
setattr(dd,'age',18) r=hasattr(dd,imp) print(r)
setattr(dd,'age',lambda a:a+1) r=hasattr(dd,'age') print(r)
|
5.delattr()根据字符串的形式去某个模块中删除东西
delattr(dd,'age') r=hasattr(dd,'age') print(r)
|
6.导入其他包下的函数
#from lib.test import com # print(com.f11())
z这种方式只能导入到lib r=__import__('lib.test.com') print(r)
<module 'lib' from 'F:\\test-py3\\Function\\fanshe\\lib\\__init__.py'>
|
故选择这种方式
r=__import__('lib.test.com',fromlist=True) print(r.f11())
|
二、一个包下的一个函数文件
from lib import account
url=input("请输入url:") uri=url.split('/')[-1] #分割url以/ #print(uri) if hasattr(account,uri): func=getattr(account,uri) r=func() print(r) else: print('404')
|
三、多个模块下的多个函数(即基于web框架的路由器)
#格式:模块名/函数 uri=input("请输入url:") url_module,url_func=uri.split('/')
m=__import__('lib.'+url_module,fromlist=True) #print (m) if hasattr(m,url_func): r=getattr(m,url_func) f=r() print(f) else: print('404')
|