0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Python] __name__属性とif __name__ == '__main__':てやつ

0
Posted at

はじめに

この記事では、Pythonのよく見るアレについて説明します。

実行環境

  • Windows 11
  • Visual Studio
  • Python 3.11.3

名前

某SNSで自動翻訳が導入されたことにより、
いろんな地域のかわいいペットやおいしい料理のやりとりであふれるようになりました。
言葉の壁というのは厄介なものですが、ただの鳴き声ではなく、
言葉を駆使するからこそ人類はここまで発展してこれたのでしょう。
動物も法則をもった鳴き声で仲間と情報や感情のやりとりをします。
一方、言葉はあらゆる物体、場所、現象、概念を表現することができます。
言葉で表現するためには定義が必要です。
定義されたものには、名前が必要です。
言い換えると、言葉で表現される全てのものは”名前”をもつということです。
モジュールも、クラスも、メソッドも、名前にあたる__name__属性を持っています。

小見出しとつながりましたね。

__name__属性

以下のコードで、__name__属性を確認してみましょう。

animal.py
def cat():
    print('The cat is out of the bag.')

print(__name__)
print(cat.__name__)
結果
__main__
cat

def cat()は、実行するcat()はどこにも書かれていないので実行されません。

コードや.pyファイルが実行される時、Pythonくんが
「このモジュールの名前は"animal"で、
こっちのメソッドは"cat"ね」
と、それぞれの__name__属性に仕分けて格納してくれます。
def cat()と定義したので、__name__属性がcatなのは納得ですね。
ん?

ファイル分割と__main__

animal.pyと名付けたのに、__name__属性に対して__main__と返されました。
これは、animal.pyを直接実行したためです。
別のファイルから呼び出してみましょう。

sweets.py
import animal

print('Pistachio is my cup of tea.')
結果
animal
cat
Pistachio is my cup of tea.

print(__name__)の結果がanimalに変わり、
呼び出された瞬間に実行されています。

別のファイルから呼んだらこのブロックは無視してね

ここまでで、タイトルのもう片方のコードの役割が分かったかと思います。
.pyファイルは単体で実行された場合、
__name__属性には__main__が格納されます。
animal.pyが別のファイルから呼び出された場合、
このモジュールの__name__属性にはanimalが格納されます。

animal.py
if __name__ == '__main__':
    cat()

上記を付け加えると、animal.pyを実行した時にはdef cat()が実行され、
sweets.pyを実行するとdef cat()は実行されません。

おわり

ここまで読んでくださり、ありがとうございます。
少しでもお役に立てれば幸いです。

不二家のドバイスタイルおいしかった!
ジェネリックドバイチョコ増えてくれ。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?