Pythonベース:反射
反射とは、提供された文字列に基づいて、オブジェクト(クラス、モジュールなど)に一致する方法です.動的呼び出しの目的を達成します.
主に4人のメンバーがいます.getattr、hasattr、setattr、delattrメンバーの取得、メンバーのチェック、メンバーの設定、メンバーの削除
構文:
getattr(オブジェクト、文字列)
setattr(オブジェクト、文字列、val)
hasattr(オブジェクト、文字列)
delattr(オブジェクト、文字列)
以下、使用_import__モジュールのインポート例:
同じディレクトリのインポート import commons __import__('commons')
多層ディレクトリのインポート from list.text import commons __import__('list.text.comons',fromlist=True)#fromlist=Trueを付けないとlistディレクトリ のみがインポートされます.
使用時にモジュール名を動的に入力することもできます!
標準ライブラリimportlibの使用を推奨
主に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__モジュールのインポート例:
同じディレクトリのインポート
多層ディレクトリのインポート
使用時にモジュール名を動的に入力することもできます!
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