2017-03-22 52 views
0

調試時,from module import *派上用場。但是,它似乎只是導入公共職能。以_開頭的函數不會導入,但我希望它們是。如何使用導入*導入私有函數?

如何獲得所有私有函數也被導入?

編輯 我充分意識到import *是一般不好的做法,但有時我需要找出並解決的迫切問題,生產和調試交互節省了關鍵時刻,在使用import *

+4

解決方案不是使用'import *',而是導入*模塊*,然後將所需的任何內容作爲'module._foo'引用。 –

回答

1

from module import *默認爲僅限導入所有公開名稱。如果需要顯式控制導入的名稱,請指定一個由模塊全局變量中的名稱(字符串)組成的__all__序列。您可以使用私有名稱添加到列表:

__all__ = ['PublicClass', 'public_function', '_private_function'] 

然而,更好的方法是不使用from module import *可言。依賴於兄弟模塊的私有名稱的代碼應該直接導入這些名稱。

請注意,使用from module import *通常是不被接受的,因爲這會讓您更難以驗證您的代碼,無論是由人類讀者還是由linters(靜態代碼檢查器)驗證,因爲您無法確定導入哪些名稱以及哪些名稱缺失。

+0

謝謝,但如果我沒有對源代碼的寫入權限呢? – mchen

+0

@mchen:那麼只需使用顯式導入。 '從模塊導入_private_name'。 –

+0

@mchen:如果你*必須*你可以*設置*'module .__ all__',但是增加一個導入行真的很乏味? –