【Python】Python ~ globals() / locals() ~

■ はじめに

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