__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