Python基础:反射

发布时间:2019-07-15 11:00:30编辑:auto阅读(1257)

    反射就是根据提供的字符串,匹配对象(类、模块等)里面的方法。达到动态调用的目的。

    主要有四个成员。getattr、hasattr、setattr、delattr  获取成员、检查成员、设置成员、删除成员

    语法:

    getattr(对象,字符串)

    setattr(对象,字符串,val)

    hasattr(对象,字符串)

    delattr(对象,字符串)

    '''一个简单的例子'''
    # 定义一个symbol类,有a,b,c三个方法。
    class Symbol(object):
        def a():
            pass
        
        def b():
            pass
        
        def c():
            pass
        
    # 输入方法名,执行对应方法。
    S = Symbol()
    method = input('input method name:').strip()
    if hasattr(Symbol,method):                    # 判断是否存在输入的方法名
        getattr(Symbol,method)                    # 如果存在则运行方法
    
    else:
     print("Error!Not Found!")


    下面是使用__import__导入模块的例子:

        相同目录导入

    1. import  commons

    2. __import__('commons')

        多层目录导入

    1. from list.text import commons

    2. __import__(' list.text.commons',fromlist=True) #如果不加上fromlist=True,只会导入list目录


    而在使用的时候也可以动态输入模块名!

    def main():  
        imp = input('input model name:')   # 输入模块名
        med = input('input method name:')  # 输入方法名
        print(imp ,med )  
        try:  
            obj = __import__(imp )  #导入该模块
            print(obj)  
            if hasattr(obj,med):  #判断有没有这个方法  
               fuc = getattr(obj,med)  #获得这个方法  
               fuc()  
            else:  
               print('Error not found method!')  
        except:  
            print('Error not found model!')  
      
    if __name__ == '__main__':  
        main()


    官方建议使用标准库importlib

    import importlib
    
    lib = importlib.import_moudle("lib\func")    #lib\func是模块路径



关键字