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,执行对应功能

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

  • 相关阅读:
    Servlet生命周期
    DAO 开发模式的几个类
    Iterator用法
    mysql相似于oracle的to_char() to_date()方法
    Java Web页面跳转
    JSP 连接MySQL 5.1
    采用DOM进行表格的修改操作
    使用css让XML文件按照HTML的风格显示出来
    正则表达式Regular Expression
    什么是“堆”,"栈","堆栈","队列",它们的区别
  • 原文地址:https://www.cnblogs.com/allen2333/p/9016445.html
Copyright © 2011-2022 走看看