這是一個概念性的問題,而不是一個實際的問題,我想問一個偉大的互聯網大羣人的反饋意見。Python - 我應該使用下劃線別名嗎?
# Module a:
import b
__all__ = ['f']
f = lambda: None
這可以讓你做到這一點:
我們都知道進口模塊該模塊的命名空間最終
import a
a.b # <- Valid attribute
有時候,這是偉大的,但大部分進口的副作用您的模塊提供的功能。在上面的例子中,我並不是想將b
作爲a
調用者的有效接口。
爲了抵消我們能做:
import b as _b
這標誌着進口爲私有。但是我無法在任何地方找到這種做法,PEP8也沒有談到使用別名來標記進口是私人的。所以我認爲這不是通常的做法。但是從某個角度來說,我認爲它在語義上更清晰,因爲它清除了模塊中暴露的部分,只留下了實際意義要暴露的相關接口。使用自動完成的IDE工作,它使得建議的列表更加輕薄。
我的問題歸結爲如果你已經看到使用該模式?它有名字嗎?哪些論據會反對使用它?
我還沒有成功使用__all__
功能來隱藏b
導入。我使用的是PyCharm,沒有看到自動完成列表的變化。
E.g.從一些模塊,我可以這樣做:
import a
並自動完成框同時顯示b
和f
。
我想我是在一些誤解之下,我以爲'__all__'只涉及'from一個import *'模式?這是我從鏈接中得出的結論,也是我通過SO搜索過的。 在PyCharm當我做一個'__all__'進入它不會改變自動完成框,當我做一個正常的'進口了' 例如爲: 模塊: 從。進口b __all__ = [ 'F'] F =拉姆達:無 (模塊B是空的)從另一個模塊我可以做現在 :從 。導入一個 自動完成框顯示'b'和'f'。 – 2014-09-28 00:44:57
@JonLauridsen:'from modulename import *'模式是'__all__'的一個*用例。如果PyCharm仍然爲'__all__'中未列出的名稱提供自動完成,這可能被認爲是PyCharm中的一個錯誤。 – 2014-09-28 00:49:13
嗯,那樣做是的.. 好吧,我創建了一個缺陷@ http://youtrack.jetbrains.com/issue/PY-14022,我們將看到會發生什麼!謝謝。 – 2014-09-28 00:55:55