反射说简单点 --> 就是利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员。
第一种:项目的目录如下图,需要导入的文件和可执行文件都在一个目录下
# -*- coding: utf-8 -*-
import commons
'''
当前是index.py 文件 导入的模块是commons.py 文件
'''
def main():
#利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员 反射
imp = input('请输入一个方法:') #比如login
# delattr() 删除内存里面的方法
# setattr() #设置内存里面的方法
if hasattr(commons,imp): #判断有没有这个方法
fuc = getattr(commons,imp) #获得这个方法
fuc() #会调用 commons文件里面的方法
else:
print('404')
如果我们不想导入 commons.py 文件 比如 import commons 我们可以用 __import__() 来导入模块
# -*- coding: utf-8 -*-
'''
当前是index.py 文件 导入的模块是commons.py 文件
'''
def main():
imp = input('请输入:') #比如 commons/login
m,f= imp.split("/")
print(m,f)
try:
obj = __import__(m) #导入该模块 commons模块
print(obj)
if hasattr(obj,f): #判断有没有这个方法
fuc = getattr(obj,f) #获得这个方法
fuc()
else:
print('404')
except Exception as e:
print(e)
if __name__ == '__main__':
main()
# -*- coding: utf-8 -*-
'''
当前是show.py 文件
'''
def main():
imp = input('请输入:') #比如 account/login
m,f= imp.split("/")
try:
obj = __import__('lib.'+m,fromlist=True) #导入该模块 account
print(obj)
if hasattr(obj,f): #判断有没有这个方法
fuc = getattr(obj,f) #获得这个方法
fuc()
else:
print('404')
except Exception as e:
print(e)
if __name__ == '__main__':
main()