フリーキーズ | 独学プログラミング

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

最終更新日
【画像】Pythonの__name__の使用例を解説します

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

__name__の基本的な使用例

代表的な使い方はif __name__ == "__main__":です。
Pythonのプログラムを直接実行する際に__name__には__main__という文字列が代入されます。

実際に見てみましょう。
sample.pyを作成し、以下を記述してみてください。

print(__name__)
print(type(__name__))

以下のコマンドで実行します。

python sample.py

出力結果は以下です。

__main__
<class 'str'>

これは共通で、直接実行されたスクリプトの__name__には__main__が入ります。したがって、Pythonスクリプトを直接実行する際には、以下のような書き方が一般化しているのです。

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
import huga
import piyo

print(__name__)

huga.huga_func()

p = piyo.PiyoCls()
p.piyo_func()
def huga_func():
    print(__name__)
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の特殊変数や関数はたくさんありますが、使い方を覚えておくと美しいコーディングにつながります。
デフォルトで備わっている機能に習熟して、より良いプログラミングライフを目指しましょう。

関連するコンテンツ