我一直在閱讀cpython HTTP包的源代碼以獲得樂趣和利潤,並注意到在server.py中它們具有__all__
變量集,但也使用函數_quote_html(html)
的前導下劃線。有沒有必要設置__all__,然後使用前導下劃線?
這不是多餘的嗎?請勿同時限制from HTTP import *
導入的內容?
他們爲什麼要這樣做?
我一直在閱讀cpython HTTP包的源代碼以獲得樂趣和利潤,並注意到在server.py中它們具有__all__
變量集,但也使用函數_quote_html(html)
的前導下劃線。有沒有必要設置__all__,然後使用前導下劃線?
這不是多餘的嗎?請勿同時限制from HTTP import *
導入的內容?
他們爲什麼要這樣做?
除了與_leading_underscores
的「私有按約定」功能外,還有:
import
版名稱;nobody
)。如果__all__
沒有定義僅覆蓋類,所有這些也將通過通配符from server import *
添加到您的命名空間。
是的,你可以只使用一種方法或其他方法,但我認爲主要的下劃線比從__all__
中排除的更強;後者說「你可能不會經常需要這個」,前者說「擋在門外,除非你知道你在做什麼」。他們都有自己的位置。
__all__
確實作爲from HTTP import *
的限制;將_
作爲函數或方法的名稱的前綴是一種慣例,用於通知用戶該項目應該被視爲私密並因此被使用以自己的風險。
這幾乎是一個文件的事情,以類似的評論意見。前導下劃線更清楚地指示人讀取代碼,特定函數或變量不是公共API的一部分,而是讓該人員根據__all__
檢查每個姓名。 PEP8明確建議以這種方式使用兩個公約:
爲了更好地支持自省,模塊應該明確他們的公共API中使用
__all__
屬性聲明 名稱。將__all__
設置爲空列表表示該模塊沒有公共API。即使
__all__
適當設定,內部接口(包, 模塊,類,函數,屬性或其他名稱)應該仍然 與單個前導下劃線前綴。
這應該是被接受的答案。 – firegurafiku 2016-12-20 20:51:36
考慮到根本不應該使用'import *','__all__'基本上是無用的,真正將內容標記爲內部的唯一方法是在它們前面加下劃線。 – firegurafiku 2016-12-20 20:56:18
您是否將問題標記爲已解決?只爲偉大的正義。 – firegurafiku 2016-12-20 20:56:55