【问题标题】: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 * 和通常的代码完成都会忽略带下划线前缀的名称。

    【讨论】:

    • 天啊,快 3 秒!
    【解决方案2】:

    您可以尝试在模块中使用__all__ 看看是否有帮助。

    import os
    
    __all__ = ['o_stuff']
    
    def o_stuff():
        return
    

    不熟悉 Intellisense,但听起来它也可以使用一些微调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2011-02-24
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多