Python裡__all__變數的作用

caimouse發表於2020-10-30

在Python的模組裡,要想像C語言編寫的DLL動態連線庫一樣,可以提供函式的介面名稱,就需要使用__all__變數了。通過這個特性,可以控制哪些函式被外面引用,哪些不能看見。這對一個大工程的軟體來說是至關重要,因為沒有控制的暴露,會導致別的軟體開發人員亂用,從而讓軟體呼叫之間出現隱形的問題。比如只給出一個介面的元件,肯定比給出一千個介面的元件使用起來簡單。因此,在一個團隊的開發配合中,一定要明確這樣一條準則:能少不能多,夠用就好。把無關重要的介面暴露出來,就會導致更多的問題。

__all__ = ['test1']



def test1():

        print("-----test1-----")



def test2():

        print("-----test2-----")

在這段程式碼裡,只暴露了test1介面,而test2介面看不到。在模組的一開始定義 __all__ 變數,import該模組後,只能找到 __all__中存在的變數或者函式,其他的不能呼叫。

 

不像 C或者 Java,Python 沒有語言原生的可見性控制,而是靠一套需要大家自覺遵守的”約定“下工作。比如下劃線開頭的應該對外部不可見。同樣,__all__ 也是對於模組公開介面的一種約定,比起下劃線,__all__ 提供了暴露介面用的”白名單“。一些不以下劃線開頭的變數(比如從其他地方 import 到當前模組的成

相關文章