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,执行对应功能

不要只写函数或者模块导入,要基于配置文件的思想,通过反射使得系统扩展性更强

posted @ 2018-05-09 20:33  Rocin  阅读(180)  评论(0编辑  收藏  举报