Python - 反射机制
反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块寻找指定函数,并执行。利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员,一种基于字符串的事件驱动。
1. 反射 ,用于方法调用
library.py
def p1():
pass
def p2():
pass
def p3():
pass
user.py
import library as lib
func = input("Please input function:")
if func == "p1":
lib.p1()
elif func == "p2":
lib.p2()
elif func == "p3":
lib.p3()
如果func有100个,我们的代码就很长,所以采用反射的方式会很方便
if hasattr(lib, func): # 判断func是否在s3中有同名函数,有返还True,否则返回False
# 不判断直接getattr时,如果“不存在”会报错
f = getattr(lib,func) # 获取s3中名字为func的函数,赋值给f
f() # 调用func同名函数
2. 反射,用于模块导入
同上,当100个模块中每个模块有100成员时
obj = __import__("字符串") #导入模块,不存在会报错
func = getattr(obj,"字符串1") #获取函数
obj = __import__("路径."+"字符串",fromlist=True) #当模块不在同一目录下时,导入模块,不加fromlist参数,只能导入"路径",注意“.”
3. 反射在web框架中用的很多,通过解析url,执行对应功能
不要只写函数或者模块导入,要基于配置文件的思想,通过反射使得系统扩展性更强