Python

【Python】__name__とはなんだろな?

この記事では、Pythonの__name__について解説します。__name__といえば以下のようなコードを見たことがあると思います。

if __name__ == '__main__':
    # 何かしらの処理

上記コードは一体何をしていたのでしょうか、__name__を学んで確認してきましょう!

__name__とは?

__name__とは、モジュールに定義されている属性です。全てのモジュールに共通で用意されており、モジュールが実行される前に値がセットされます。

__name__にはモジュールの名前が格納されており、基本的にモジュールをインポートする際にモジュール名を識別するのに使われます。

Link__name__ – インポートシステム — Python 3.9.4 ドキュメント

__name__の値

__name__属性には、モジュール名が完全修飾名で格納されています。

import sys
import random

print(sys.__name__)
print(random.__name__)

実行結果

sys
random

ただし、例外としてトップレベルで実行した(Pythonコマンドを使って実行した)モジュールの__name__には__main__が格納されています。

ターミナルまたはコマンドプロンプト

Python モジュール名.py

上記のように呼び出されたモジュール内で__name__を呼び出すと以下のように__main__が返される。

print(__name__)

実行結果

__main__
このように、Pythonコマンドで実行されたモジュールのことを「エントリーポイント」と呼んだりします

ということは…

一番最初のコード

if __name__ == '__main__':
    # 何かしらの処理

は、そのモジュールがトップレベルで実行された場合の処理を記述していた!

ということになります。

例えば以下のようにコードを書いてしまうと他のスクリプトファイルからインポートした際にも同様に処理されてしまいます。

test.py

print('test.pyが実行された')

試しに他のファイルからインポートしてみます。

main.py

import test

実行結果

test.pyが実行された

しかし、以下のように__name____main__かどうか調べることでトップレベルで実行された際にのみ処理させることができます。

test.py

if __name__ == '__main__':
    print('test.pyが実行された')

こうすることでインポートしても実行させなくようにできます。

import test

実行結果

まとめ

__name__には、

  • モジュール名(完全修飾名)
  • トップレベルで実行された場合は__main__

が格納されているのがわかりました!

利用方法としては__main__が格納されているか判定してトップレベルで実行された場合の処理を記述することができます。

if __name__ == '__main__':
    # 何かしらの処理

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

最短3か月でエンジニア転職『DMM WEBCAMP COMMIT』