調試時,from module import *
派上用場。但是,它似乎只是導入公共職能。以_
開頭的函數不會導入,但我希望它們是。如何使用導入*導入私有函數?
如何獲得所有私有函數也被導入?
編輯 我充分意識到import *
是一般不好的做法,但有時我需要找出並解決的迫切問題,生產和調試交互節省了關鍵時刻,在使用import *
。
調試時,from module import *
派上用場。但是,它似乎只是導入公共職能。以_
開頭的函數不會導入,但我希望它們是。如何使用導入*導入私有函數?
如何獲得所有私有函數也被導入?
編輯 我充分意識到import *
是一般不好的做法,但有時我需要找出並解決的迫切問題,生產和調試交互節省了關鍵時刻,在使用import *
。
from module import *
默認爲僅限導入所有公開名稱。如果需要顯式控制導入的名稱,請指定一個由模塊全局變量中的名稱(字符串)組成的__all__
序列。您可以使用私有名稱添加到列表:
__all__ = ['PublicClass', 'public_function', '_private_function']
然而,更好的方法是不使用from module import *
可言。依賴於兄弟模塊的私有名稱的代碼應該直接導入這些名稱。
請注意,使用from module import *
通常是不被接受的,因爲這會讓您更難以驗證您的代碼,無論是由人類讀者還是由linters(靜態代碼檢查器)驗證,因爲您無法確定導入哪些名稱以及哪些名稱缺失。
謝謝,但如果我沒有對源代碼的寫入權限呢? – mchen
@mchen:那麼只需使用顯式導入。 '從模塊導入_private_name'。 –
@mchen:如果你*必須*你可以*設置*'module .__ all__',但是增加一個導入行真的很乏味? –
解決方案不是使用'import *',而是導入*模塊*,然後將所需的任何內容作爲'module._foo'引用。 –