2015-02-17 65 views
3

我一直在閱讀cpython HTTP包的源代碼以獲得樂趣和利潤,並注意到在server.py中它們具有__all__變量集,但也使用函數_quote_html(html)的前導下劃線。有沒有必要設置__all__,然後使用前導下劃線?

這不是多餘的嗎?請勿同時限制from HTTP import *導入的內容?

他們爲什麼要這樣做?

+0

考慮到根本不應該使用'import *','__all__'基本上是無用的,真正將內容標記爲內部的唯一方法是在它們前面加下劃線。 – firegurafiku 2016-12-20 20:56:18

+0

您是否將問題標記爲已解決?只爲偉大的正義。 – firegurafiku 2016-12-20 20:56:55

回答

3

除了與_leading_underscores「私有按約定」功能外,還有:

  • 不少import版名稱;
  • 四個類名;
  • 三個函數名稱沒有前導下劃線;
  • 兩個字符串「常量」;和
  • 一個局部變量(nobody)。

如果__all__沒有定義僅覆蓋類,所有這些也將通過通配符from server import *添加到您的命名空間。

是的,你可以只使用一種方法或其他方法,但我認爲主要的下劃線比從__all__中排除的更強;後者說「你可能不會經常需要這個」,前者說「擋在門外,除非你知道你在做什麼」。他們都有自己的位置。

4

__all__確實作爲from HTTP import *的限制;將_作爲函數或方法的名稱的前綴是一種慣例,用於通知用戶該項目應該被視爲私密並因此被使用以自己的風險。

1

這幾乎是一個文件的事情,以類似的評論意見。前導下劃線更清楚地指示人讀取代碼,特定函數或變量不是公共API的一部分,而是讓該人員根據__all__檢查每個姓名。 PEP8明確建議以這種方式使用兩個公約:

爲了更好地支持自省,模塊應該明確他們的公共API中使用__all__屬性聲明 名稱。將 __all__設置爲空列表表示該模塊沒有公共API。

即使__all__適當設定,內部接口(包, 模塊,類,函數,屬性或其他名稱)應該仍然 與單個前導下劃線前綴。

+0

這應該是被接受的答案。 – firegurafiku 2016-12-20 20:51:36

相關問題