发布时间:2019-09-27 07:13:18编辑:auto阅读(2060)
1、反射 用于方法调用 利用字符串的形式去对象中操作成员(增/删/查),注意仅是在内存中操作 #hasattr(模块,'字符串'): 判断有没有 ,模块中有没有“字符串”为名字的成员; 返还True或者False #getattr(模块,'字符串'): 获取方法,从模块中获取“字符串”为名字的成员
#s3.py
p1(): () p2(): () p3(): () #s2.py
import s3 inp = input("Please input function:") if inp == "p1": s3.p1() elif inp == "p2": s3.p2() elif inp == "p3": s3.p3()
##如果inp有100个,我们的代码就很长,所以采用反射的方式会很方便 if hasattr(s3,inp): #判断inp是否在s3中有同名函数,有返还True,否则返回False #不判断直接getattr时,如果“不存在”会报错 f = getattr(s3,inp) #获取s3中名字为inp的函数,赋值给f f() # 调用inp同名函数
2 反射 用于模块导入
同上,当100个模块中每个模块有100成员时
obj = __import__("字符串") #导入模块,不存在会报错 func = getattr(obj,"字符串1") #获取函数
3 当模块不在同一目录下时
obj = __import__("路径."+"字符串",fromlist=True) #导入模块,不加fromlist参数,只能导入"路径",注意“.”
注意:反射在web框架中用的很多,通过解析url,执行对应功能
上一篇: Python3 找素数
下一篇: python3的异常类型
47750
46246
37132
34636
29231
25893
24762
19866
19426
17916
5720°
6323°
5841°
5891°
6991°
5830°
5850°
6364°
6318°
7682°