Pythonベース:反射


反射とは、提供された文字列に基づいて、オブジェクト(クラス、モジュールなど)に一致する方法です.動的呼び出しの目的を達成します.
主に4人のメンバーがいます.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__モジュールのインポート例:
同じディレクトリのインポート
  • import  commons
  • __import__('commons')

  • 多層ディレクトリのインポート
  • from list.text import commons
  • __import__('list.text.comons',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