__all__ = ['SpamPublicClass']
但是,當然,這只是爲:
from spammodule import *
有沒有辦法來阻止一類的進口。我擔心有人會寫我的代碼的API級別混淆:
from spammodule import SimilarSpamClass
它會引起調試混亂。
__all__ = ['SpamPublicClass']
但是,當然,這只是爲:
from spammodule import *
有沒有辦法來阻止一類的進口。我擔心有人會寫我的代碼的API級別混淆:
from spammodule import SimilarSpamClass
它會引起調試混亂。
的約定是使用_作爲前綴:
class PublicClass(object):
pass
class _PrivateClass(object):
pass
以下:
from module import *
不會導入_PrivateClass。
但這並不妨礙他們導入它。他們仍然可以明確導入它。
from module import _PrivateClass
使用和下劃線開始私有類的名稱,以便通過名稱明確它不是供公衆使用的。這實際上不會阻止任何人進口課程,但它不應該是偶然發生的。從下劃線開始的名稱是「內部的」,這是一個完善的慣例。
沒有辦法真正阻止訪問模塊的內容,或在Python此事一類的內容。 這種事情是按照慣例命名您的類_SimilarSpamClass
(帶領先的下劃線)以向調用者表明這是您的模塊的實現細節,而不是已發佈的API的一部分。
爲了紀念什麼是「私人」在Python 正確記錄你的公共API因此其他開發人員知道如何正確使用你的模塊和按照標準naming conventions因此,當他們已經從偏離你的模塊的用戶很容易發現你的API到你的實現。
「我很擔心混亂......」我將重點放在明確的文檔而不是「預防」上。他們可以閱讀來源。他們可以繞過你放置的任何東西。我認爲一盎司明確的文件擊敗了一英鎊的「阻塞」企圖。 – 2010-02-01 15:58:31