[Blender3.3] pythonでの__name__について
Blenderのアドオンでは、常に以下の文を入れるようにとされています。
if __name__ == "__main__": register()
記事によっては、この2行はおまじないのように書かれていますが、そこはきちんと把握しておきたいのが人情というもの。この __name__ の値がいつどういう値になるのかを調べてみます。
まず、コンソール付きで起動したBlenderの中でテキストエディターを開き、以下の一行だけを入力します。
print("This is '" + __name__ + "'.")
この状態で「テキスト>スクリプト実行」あるいはalt+pを押下すると、以下の行がコンソールに現れます。
This is '__main__'.
つまり、テキストエディターの中でスクリプト実行するときには __name__ の値は __main__ になっているということが分かりました。
では、次に中身のないアドオンを一つ作ります。今回の目的からすれば、内容はなんでも構わないわけなので、一番簡単に、以下の通りのものを test_print.py として作成しました。
- bl_info = {
- "name": "Test Print",
- "author": "Shiki Kuraga",
- "version": (1, 0),
- "blender": (3, 3, 0),
- "location": "none",
- "description": "Test Print in Add-on",
- "warning": "",
- "support": "TESTING",
- "doc_url": "",
- "category": "object",
- }
- import bpy
- def register():
- print("register in '" + __name__ + "'")
- def unregister():
- print("unregister in '" + __name__ + "'")
- print("This is '" + __name__ + "'.")
- if __name__ == "__main__":
- register()
これを先程と同じようにテキストエディターの中でスクリプト実行(alt+p)すれば、__name__ が __main__ なので、register()が実行されるのは分かります。
だとしたときに、このアドオンをインストールしたらどうなるでしょうか。それを試してみたいと思います。
プリファレンスから、アドオンの画面を出して、インストール。すると、アドオンの画面に、Test Printが表示され、インストールが成功したことが確認できます。
This is 'test_print'. register in 'test_print'
つまり、アドオンとして読み込まれるときも、register()が呼ばれるときも、__name__ は、__main__ではなくて、test_printになるようです。
if __name__ == "__main__": register()
の一行は、テキストエディターの中でスクリプト実行する際にregister()するためのものという理解になるのですけど、合っているのでしょうか。