Python 中 __all__ 的作用
阿新 • • 發佈:2020-12-24
我越來越多的使用Python了,經常看到__all__
變數再各種__init__.py
檔案中,誰能解釋為什麼那麼做呢?
解答
它是一個string元素組成的list變數,定義了當你使用from <module> import *
匯入某個模組的時候能匯出的符號(這裡代表變數,函式,類等)。
舉個例子,下面的程式碼在foo.py
中,明確的匯出了符號bar
,baz
__all__ = ['bar', 'baz']
waz = 5
bar = 10
def baz(): return 'baz'
- 1
- 2
- 3
- 4
- 5
匯入實現如下:
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>
匯入方式並沒有影響,仍然可以從外部匯入。