1. 程式人生 > 實用技巧 >Python 中 __all__ 的作用

Python 中 __all__ 的作用

我越來越多的使用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>匯入方式並沒有影響,仍然可以從外部匯入。