`__all__` 的使用

__all__ 的使用并不會(huì)改變一個(gè)package 所暴露的方法和變量,例如在grocery package中,有以下的 __init__.py 文件:

def get_bread():
    print('A bread.')

def get_coffee():
    print('A cup of coffee.')

def get_milk():
    print('Some milk.')

__all__ = ['get_bread', 'get_coffee']

你依然可以使用 from grocery import get_milk 獲取 get_milk 方法.
__all__ 的唯一影響是當(dāng)你使用 wild import 的時(shí)候:from grocery import *,只會(huì)導(dǎo)入 __all__ 數(shù)組中包含的內(nèi)容。換言之,使用 from grocery import * 時(shí),get_milk 是不會(huì)被引入的。

同時(shí)也要注意,不要在 __all__ 數(shù)組中包含沒(méi)有定義的函數(shù)或變量。如果在 __all__ 數(shù)組中包含沒(méi)有定義的函數(shù)或變量,使用 import grocery 并不會(huì)出錯(cuò)(因?yàn)橹粫?huì)導(dǎo)入定義了的方法和變量)。但是使用 from grocery import * 時(shí)會(huì)出現(xiàn)未定義的錯(cuò)誤。

所以 __all__ 和python中的私有方法實(shí)現(xiàn)一樣,都是約定俗成的協(xié)議。約定好了 __all__ 中聲明的內(nèi)容就是 public api。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容