我想禁止用户像这样导入:
from module.sub import *
这应该引发异常并且不要让任何东西进入命名空间,除非用户导入任何特定的东西:
from module.sub import apples
答案 0 :(得分:5)
在module.sub
:
__all__ = []
它不会引发异常,但当有人from module.sub import *
时,将不会导入任何内容 module.sub
仍会初始化,添加到{{1} },并添加到本地名称空间,但sys.modules
中定义的名称都不会添加到名称空间。
然后,您可以直接引用module.sub
而不是module.sub.apples
。
如果你真的想要一个例外,代价是有点混乱,你可以这样做:
apples
然后:
__all__ = ['not_defined']
答案 1 :(得分:0)
幸运的是,这些好人们开辟了python开源,所以你当然可以做到这一点
在此处下载相应的来源https://www.python.org/downloads/source/
修改import.c,如果它得到了splat,就会引发错误......
或修改Grammar以忽略splat(这也需要更改Parser
一旦你做了其中的一件事,只需重新编译python并使用你的新python而不是标准的(只需重新编译可能会对这一步骤的复杂性有点误导)
__ALL__ = []
__init__.py