我想禁止用户导入这样:
from module.sub import *
Run Code Online (Sandbox Code Playgroud)
这应该引发和异常,并且不要让任何东西进入命名空间,除非用户导入任何特定的东西,如下所示:
from module.sub import apples
Run Code Online (Sandbox Code Playgroud)
在module.sub:
__all__ = []
Run Code Online (Sandbox Code Playgroud)
它不会引发异常,但是当有人这样做时from module.sub import *,将导入的任何内容 module.sub仍将被初始化,添加到sys.modules本地命名空间,并添加到本地命名空间中,但是没有任何名称module.sub将被添加到命名空间中.
然后你可以参考,module.sub.apples但不能apples直接参考.
如果你真的想要一个例外,代价是有点混乱,你可以这样做:
__all__ = ['not_defined']
Run Code Online (Sandbox Code Playgroud)
然后:
>>> from module.sub import *
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'module' object has no attribute 'not_defined'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |