[問与答]Python中_all__ の役割?
Pythonのソースコードや関連フレームワークのソースコードを見ると、
問題の出典
Can someone explain all in Python?
に質問
私はますますPythonを使うようになりました.よく
に答える
これはstring要素からなるlist変数で、
例を挙げると、以下のコードは
インポートは次のように実現されます.
に注意
なお、
__init__.py
またはソースファイルの先頭に__all__
変数の定義が表示されます.今日はその役割についてお話しします.orangleliu 問題の出典
Can someone explain all in Python?
に質問
私はますますPythonを使うようになりました.よく
__all__
変数といろいろな__init__.py
ファイルを見ますが、誰がなぜそんなことをしたのか説明できますか.に答える
これはstring要素からなるlist変数で、
from <module> import *
を使用してモジュールをインポートしたときに導出できる記号(ここでは変数、関数、クラスなどを表す)を定義します.例を挙げると、以下のコードは
foo.py
において、符号bar
、baz
が明確に導出されている__all__ = ['bar', 'baz']
waz = 5
bar = 10
def baz(): return 'baz'
インポートは次のように実現されます.
from foo import *
print bar
print baz
# The following will trigger an exception, as "waz" is not exported by the module
# , "waz" , __all__
print waz
foo.py
の__all__
を注釈すると、上記のコードは実行されても問題なく、import *
のデフォルトの動作は、与えられたネーミングスペースからすべての記号を導出することである(もちろん、下線の先頭のプライベート変数を除く).に注意
なお、
__all__
はfrom <module> import *
という導入方式にのみ影響し、from <module> import <member>
の導入方式には影響せず、外部から導入することができる.