一、反射:根据字符串的形式去对象(某个模块)中去操作成员
通过字符串的形式,导入模块
通过字符串的形式,去模块中寻找指定的函数,并执行
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这种方式只能导入到libr=__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')
 |