zoukankan      html  css  js  c++  java
  • python基础-第七篇-7.3反射

    定义

      反射是根据字符串的形式去对操作其成员

      了解反射前,我先看看内置方法__import__,还记得这个内置方法吗?

    • __import__  用于以字符串的形式导入模块
    inp = input('请输入你要导入的模块:')
    mokuai = __import__(inp)  #import xml as mokuai
    print(mokuai.__doc__)
    • getattr  用于以字符串的形式去某个模块寻找函数
    import re
    str_func = input('请输入你要执行re下的方法:')
    tar_func = getattr(re,str_func)
    print(tar_func) #打印找到函数的内存地址

     

    反射成员

    • getattr   用于以字符串的形式去某个模块寻找函数

    import re
    str_func = input('请输入你要执行re下的方法:')
    tar_func = getattr(re,str_func,None)  #找到了就返回函数,没有找到就返回None,不设置None,没找到就报错
    print(tar_func) #打印找到函数的内存地址
    • hasattr  根据字符串的形式去某个模块中查看是否存在某东西

    import re
    ret1 = hasattr(re,'match')
    print(ret1)
    ret2 = hasattr(re,'fjfijajfojg')
    print(ret2)
    • setattr 设置

    r = hasattr(commons,'age')
    print(r)  #False
    setattr(commons,'age',lambda a:a + 1)
    r = getattr(commons,'age')  #没报错
    ret = r(1)
    print(ret)
    • delattr 删除

    实例:web框架的路由系统

    from lib import account
    url = input('请输入url:')
    inp = url.split('/')[-1]
    if hasattr(account,inp):
        func = getattr(account,inp)
        func()
    else:
        print('404')
    url = input('请输入url:')
    target_module,target_func = url.split('/')
    m = __import__('lib.'+target_module,fromlist=True)
    if hasattr(m,target_func):
        tar_func = getattr(m,target_func)
        r = tar_func()
        print(r)
    else:
        print('404')

                                                    欢迎大家对我的博客内容提出质疑和提问!谢谢

                                                                                 笔者:拍省先生 

  • 相关阅读:
    12.2 ROS NavFn全局规划源码解读_2
    12.1 ROS NavFn全局规划源码_1
    12 ROS Movebase主体源码解读
    11 ROS 动态参数调节
    10. ROS costmap代价地图
    无人驾驶汽车1: 基于Frenet优化轨迹的无人车动作规划方法
    VC下加载JPG/GIF/PNG图片的两种方法
    vc++加载透明png图片方法-GDI+和CImage两种
    供CImage类显示的半透明PNG文件处理方法
    使用MFC CImage类绘制PNG图片时遇到的问题
  • 原文地址:https://www.cnblogs.com/xinsiwei18/p/5645244.html
Copyright © 2011-2022 走看看