【问题标题】:Keep imported modules from showing up in code completion?防止导入的模块出现在代码完成中?
【发布时间】:2016-11-23 12:47:43
【问题描述】:
如何防止导入的模块被访问(即阻塞我的代码完成选项)?
例如:
# testmodule.py
import os
def o_stuff():
return
当我导入testmodule 时,我不希望每次输入testmodule. 时都出现os;我只想要在 testmodule 中声明的函数/类——在这种情况下,只是 o_stuff。
是否有类似于星号的东西(即from testmodule import *)可以做到这一点?
【问题讨论】:
标签:
python
python-2.7
autocomplete
python-import
【解决方案1】:
您可以定义一个特殊变量 __all__,其中包含要由 from module import * 导入的名称列表 - 例如:
# testmodule.py
import os
__all__ = ['o_stuff', 'more_stuff']
def o_stuff():
pass
def more_stuff():
pass
具有代码完成功能的 IDE 通常也会尊重 __all__(虽然我不熟悉 Visual Studio,所以我不知道 IntelliSense 是否这样做)。
为了完整起见,我会强烈建议反对它(因为它会惹恼任何阅读您的代码以分散注意力的人)的替代方法是将模块导入为带下划线前缀的别名:
# ugly_as_sin.py
import os as _os
def o_stuff():
return _os.name
同样,from module import * 和通常的代码完成都会忽略带下划线前缀的名称。
【解决方案2】:
您可以尝试在模块中使用__all__ 看看是否有帮助。
import os
__all__ = ['o_stuff']
def o_stuff():
return
不熟悉 Intellisense,但听起来它也可以使用一些微调。