Python:如何禁止从模块导入类?

Python:如何禁止从模块导入类?,python,import,python-module,python-import,Python,Import,Python Module,Python Import,我试过: __all__ = ['SpamPublicClass'] 但是,这当然只是为了: from spammodule import * 是否有方法阻止类的导入。我担心有人会在我的代码的API级别编写混乱: from spammodule import SimilarSpamClass 这将导致调试混乱。用和下划线开始私有类的名称,这样就可以通过名称清楚地知道它不是供公共使用的。这实际上不会阻止任何人导入该类,但这不应该是偶然发生的。以下划线开头的名称是“内部的”,这是一个公认的惯例

我试过:

__all__ = ['SpamPublicClass']
但是,这当然只是为了:

from spammodule import *
是否有方法阻止类的导入。我担心有人会在我的代码的API级别编写混乱:

from spammodule import SimilarSpamClass

这将导致调试混乱。

用和下划线开始私有类的名称,这样就可以通过名称清楚地知道它不是供公共使用的。这实际上不会阻止任何人导入该类,但这不应该是偶然发生的。以下划线开头的名称是“内部的”,这是一个公认的惯例。

惯例是使用u作为前缀:

class PublicClass(object):
    pass

class _PrivateClass(object):
    pass
以下是:

from module import *
将不会导入_PrivateClass

但这不会阻止他们进口。他们仍然可以显式地导入它

from module import _PrivateClass

在Python中,实际上无法阻止对模块内容或类内容的访问这类事情按约定处理命名类
\u SimilarSpamClass
(带前导下划线),以向调用者表明这是模块的实现细节,而不是已发布API的一部分


要在Python中将某些内容标记为“私有”,请正确地记录您的公共API,以便其他开发人员知道如何正确使用您的模块,并遵循标准,以便模块的用户很容易注意到他们何时从您的API偏离到您的实现。

在Python中就是这样做的。Python的设计带有“成年人同意”的开发理念。如果有人想导入
类似的pamclass
\u类似的pamclass
,他们可以,但您警告他们,“我担心混淆…”我会关注清晰的文档,而不是“预防”。他们可以读取源代码。他们可以绕过你设置的任何东西。我认为一盎司清晰的文档胜过一磅试图“阻止”。谢谢。这很有帮助。另一个问题是,我正在将一个类从模块B导入模块a(我不希望模块a的用户访问该类,但在从模块B导入时它立即可用。我想我可以将其作为
从模块B导入SpamClass作为\u SpamClass