zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Closing File Descriptors
    Redirecting stdout using exec
    Debugging on part(s) of the script
    Android深入浅出之Audio 第一部分 AudioTrack分析
    svn在linux下的使用(svn命令)[转]
    Android深入浅出之Binder机制
    bash中获取文件路径和文件命的函数
    Android深入浅出之Audio 第一部分 AudioTrack分析
    Shell的脚本编程
    Android深入浅出之Surface
  • 原文地址:https://www.cnblogs.com/liguangxu/p/5578729.html
Copyright © 2011-2022 走看看