python3学习之反射

发布时间:2019-09-27 07:13:18编辑:auto阅读(2060)

    1、反射  用于方法调用
    利用字符串的形式去对象中操作成员(增/删/查),注意仅是在内存中操作
    #hasattr(模块,'字符串'): 判断有没有 ,模块中有没有“字符串”为名字的成员;
      返还True或者False
    #getattr(模块,'字符串'): 获取方法,从模块中获取“字符串”为名字的成员
    #s3.py
    p1():
        ()
    p2():
        ()
    p3():
        ()
        
    #s2.py
    import s3
    
    inp = input("Please input function:")
    
    if inp == "p1":
        s3.p1()
    elif inp == "p2":
        s3.p2()
    elif inp == "p3":
        s3.p3()
    ##如果inp有100个,我们的代码就很长,所以采用反射的方式会很方便
    
    if hasattr(s3,inp):    #判断inp是否在s3中有同名函数,有返还True,否则返回False
                           #不判断直接getattr时,如果“不存在”会报错
        f = getattr(s3,inp)   #获取s3中名字为inp的函数,赋值给f
        f()                   # 调用inp同名函数
    2 反射   用于模块导入

    同上,当100个模块中每个模块有100成员时

    obj = __import__("字符串")    #导入模块,不存在会报错
    func = getattr(obj,"字符串1")  #获取函数

    3 当模块不在同一目录下时


    obj = __import__("路径."+"字符串",fromlist=True)    #导入模块,不加fromlist参数,只能导入"路径",注意“.”


    注意:反射在web框架中用的很多,通过解析url,执行对应功能

关键字

上一篇: Python3 找素数

下一篇: python3的异常类型