TOP
プログラミング独学コンテンツ一覧
Pythonの__name__の使用例を解説します

Pythonの__name__の使用例を解説します

最終更新日
Pythonにはいくつかの特殊な変数があり、__name__もその一種です。
Pythonにおける__name__は、直接実行されたスクリプトに組み込まれるモジュール名が代入された変数です。

__name__の基本的な使用例

代表的な使い方はif __name__ == "__main__":です。
Pythonのプログラムを直接実行する際に__name__には__main__という文字列が代入されます。
実際に見てみましょう。
sample.pyを作成し、以下を記述してみてください。
sample.py
print(__name__)
print(type(__name__))
以下のコマンドで実行します。

$ python sample.py

出力結果は以下です。
__main__
<class 'str'>
これは共通で、直接実行されたスクリプトの__name__には__main__が入ります。したがって、Pythonスクリプトを直接実行する際には、以下のような書き方が一般化しているのです。
sample.py
def say_hello(name: str) -> str:
    return f"Hello {name}!"

if __name__ == "__main__":
    print(say_hello("World"))

__name__の別の使用例

次に、他のモジュールから参照されたり、関数内で参照した場合はどうなるか見ていきましょう。
以下のように同じディレクトリ内にhoge.pyhuga.py、そしてpiyo.pyを作って試していきます。
$ tree
.
├── hoge.py
├── huga.py
└── piyo.py
hoge.py
import huga
import piyo

print(__name__)

huga.huga_func()

p = piyo.PiyoCls()
p.piyo_func()
huga.py
def huga_func():
    print(__name__)
piyo.py
class PiyoCls:
    def __init__(self):
        print(__name__)

    def piyo_func(self):
        print(__name__)
hoge.pyを中心にスクリプトを実行する形です。
実行してみましょう。

$ python hoge.py

$ python hoge.py
__main__
huga
piyo
piyo
まず、直接実行対象のhoge.pyで最初に説明した__main__が出力されます。
その次にhuga_func()内の__name__hugaモジュールであるため、hugaが出力されます。
クラスが含まれるpiyo.pyは、インスタンス生成で__init__内のprint(__name__)が出力され、その後にpiyo_func()print(__name__)が出力されています。
piyo.pyはモジュール自体がpiyoのため、piyoが出力されます。

__name__の使い所

単純に__name__はモジュール名を取得できる変数ですが、使い所は== "__main__"だけではありません。
動的にモジュールインポートしたい際によく使われるimportlib.import_moduleで、動的インポート対象のモジュールによって処理を分けたいときに使う、などの使い所があります。
Pythonの特殊変数や関数はたくさんありますが、使い方を覚えておくと美しいコーディングにつながります。
デフォルトで備わっている機能に習熟して、より良いプログラミングライフを目指しましょう。