■ はじめに
https://dk521123.hatenablog.com/entry/2020/05/15/140053
の続き。 globals()ってのを扱ったから、どんなものか調べてみた
目次
【1】関連する組み込み関数 1)globals() 2)locals() 【2】使用上の注意 【3】サンプル
【1】関連する組み込み関数
1)globals()
* グローバルスコープに定義されているクラスや関数などをDictとして返す
https://docs.python.org/ja/3.8/library/functions.html#globals
出力結果
print('globals(): ', globals()) # globals(): {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000238F53F0123>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'c:/xxxx/demo.py', '__cached__': None}
2)locals()
* ローカルスコープに定義されているクラスや関数などをDictとして返す
https://docs.python.org/ja/3.8/library/functions.html#locals
出力結果
print('locals(): ', locals()) # locals(): {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000238F53F0123>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'c:/xxxx/demo.py', '__cached__': None}
【2】使用上の注意
https://dk521123.hatenablog.com/entry/2020/05/15/140053
でも述べたが、 ~~~~~ コードが追いづらくなる ~~~~~
【3】サンプル
指定した文字列(今回の場合「DemoClass1」「DemoClass2」) のクラスを呼び出して実行するサンプル
main.py
from demo_class1 import DemoClass1 from demo_class2 import DemoClass2 class_1 = globals().get("DemoClass1") # 「Hello, Mike」が出力 print(class_1.get_something("Mike")) class_2 = globals().get("DemoClass2") # 「Hi, Mike」が出力 print(class_2.get_something("Mike"))
demo_class1.py
class DemoClass1: def get_something(name:str): return f"Hello, {name}"
demo_class2.py
class DemoClass2: def get_something(name:str): return f"Hi, {name}"
参考文献
https://qiita.com/Chanmoro/items/9b0105e4c18bb76ed4e9
関連記事
Python ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2019/10/12/075251
Python ~ 基本編 / eval, exec ~
https://dk521123.hatenablog.com/entry/2020/05/15/140053