python-反射

python的反射

反射:利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员,主要用于伪造web框架中的路由系统

 1 #我们首先定义一个common模块用于存储url调用模块中的对应的函数
 2 def login():
 3     print('login')
 4 
 5 def home():
 6     print('home')
 7 
 8 #主模块中
 9 #调用common模块
10 import common
11 
12 def run():
13     inp =input('输入要访问的页面!')
14     #inp字符串类型inp='login'
15     #commons inp()#commons.login
16     #利用字符串的形式去对象(模块)中操作(寻找/检查/删除/设置)成员
17     if hasattr(common,inp):
18         #getattr根据第一个模块参数去调用第二个字符串参数
19         func=getattr(common,inp)
20         func()
21     else:
22         print('404')
23 
24 run()
25 #运行
26 >>>输入要访问的页面!login
27 >>>login    

第二种方式:

 1 #common模块定义url
 2 def login():
 3     print('login')
 4 
 5 def home():
 6     print('home')
 7 
 8 
 9 #利用vars函数将字符串转换成变量的形式进行调用
10 import common
11 def run():
12     inp =input('输入要访问的页面!')
13     if hasattr(common,inp):
14         func=vars(common)[inp]
15         func()
16     else:
17         print('404')
18 
19 
20 
21 if __name__ == '__main__':
22     run()
23 
24 >>>输入要访问的页面!login
25 >>>login
 1 #多层url的调用:不同模块中存在不同的url调用函数的情况下
 2 #模块mommon
 3 def login():
 4     print('login')
 5 
 6 def home():
 7     print('home')
 8 
 9 #模块mommon2
10 
11 def f1():
12     print('f1')
13 
14 def f2():
15     print('f2')
16 
17 #主函数
18 inp = input('输入要访问的页面!')
19 e, f = inp.split('/')
20 
21 #__import__内置方法用于将输入字符串转化为对应模块进行调用
22 obj = __import__(e)
23 if hasattr(obj,f):
24     func = getattr(obj,f)
25     func()
26 else:
27     print("404")
28 
29 >>>输入要访问的页面!common/login
30 >>>login
31 >>>输入要访问的页面!common2/f1
32 >>>f1

 

posted @ 2016-06-12 20:54  ppppppy  阅读(214)  评论(0编辑  收藏  举报