name属性とは?

「if__name__==’__main__’:」の意味(参考サイト・ほぼ抜粋:「if__name__==’__main__’:」について – Takuya Miyashita , Python – if __name__ == ‘__main__’:の意味 – ざっくりん雑記

「if__name__==’__main__’:」内は,main文として扱う時だけ実行する.これの外にある文は,importするだけでも実行されてしまうので注意.

例として以下のようなname.pyがあるとする.

# def
def test():
    print('main文で実行したときのみ表示されます')

# 1.importのみでも実行される
print('importのみでも表示されます')

# 2.main文として扱うときのみ実行される
if __name__ == '__main__':
    test()

これをpython name.pyで実行すると・・・

python name.py
importのみでも表示されます
main文で実行したときのみ表示されます

と実行される.一方でname.pyをimportするだけのコードname2.pyを用意すると・・・

python name2.py
importのみでも表示されます

となる.

まとめると__name__属性は,

  • モジュール作成と同時に自動的に与えられて以下の設定が行われる
    • モジュールファイルがトップレベルファイル(main)として機能する ⇒ __name__に__main__が代入される
    • モジュールファイルがimportされる ⇒ __name__にモジュール名が代入される

つまり,python XXX.pyで実行したときはif name==’main’はTrue.importを用いた時if name==’main’はFalse.

あわせて読みたい