zoukankan      html  css  js  c++  java
  • 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,执行对应功能

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

  • 相关阅读:
    学习笔记datatablexml转换
    立即执行函数
    MySQL基操—1.Linux下安装(CentOS6/7yum、rpm、tar)
    Linux1.11.shell(环境变量配置文件)
    三国HR评估报告
    毕业5年后拉开差距的原因
    职业的选择
    WPF图片的缩放节省内存
    .asmx支持post请求或者get请求调用
    ionic3遇到的刷新页面服务器关闭的问题
  • 原文地址:https://www.cnblogs.com/allen2333/p/9016445.html
Copyright © 2011-2022 走看看