天天看點

【你不了解的Python冷知識】__all__的作用/子產品導入

問題

Python程式設計時,涉及到多子產品的複雜程式設計時,經常會看到變量__all__,那麼該變量的作用是什麼呢?

方法

建立一個func.py檔案,編寫兩個簡單函數foo和_bar,如下:

def foo():
    print('foo')
    
def _bar():
    print('bar')      

建立一個test.py檔案,測試導入。

from func import *

foo()
_bar()      

運作後,發現foo()可以正常調用,而_bar()則報錯。

以上表明,當以下劃線"_"開頭的變量、函數、類在進行導入時,均為私有,是以,如果想設定某變量/函數/類導出後不可見,可按照此法。

假如,我對下劃線開頭的指令方式十分敏感,那麼可有其他方式代替,答案就是__all__,隻需要在__all__變量中指明需要導出的元素即可,如下所示:

def foo():
    print('foo')
    
def _bar():
    print('bar')
    
    
def foobar():
    print('foobar')
    
def barfoo():
    print('barfoo')
    

__all__ = ['foobar', '_bar']      
from func import *
 
foo() # 出錯
_bar() # 即使是_開頭,隻要__all__中指出,依然可用

foobar()      

結語