【发布时间】:2014-09-28 00:29:03
【问题描述】:
这是一个概念性问题,而不是一个实际问题,我想向广大的互联网人群寻求反馈。
我们都知道导入的模块最终会在该模块的命名空间中:
# Module a:
import b
__all__ = ['f']
f = lambda: None
这允许你这样做:
import a
a.b # <- Valid attribute
有时这很好,但大多数导入都是模块提供的功能的副作用。在上面的示例中,我并不是要将b 公开为a 的调用者的有效接口。
为了抵消我们可以做的:
import b as _b
这会将导入标记为私有。但是我在任何地方都找不到这种做法,PEP8 也没有谈论使用别名将导入标记为私有。所以我认为这不是常见的做法。但从某个角度来看,我会说它在语义上绝对更清晰,因为它会清理模块的暴露位,只留下你真正想要暴露的相关接口。使用具有自动完成功能的 IDE 可以使建议的列表更加精简。
我的问题归结为您是否见过这种模式的使用?它有名字吗?有什么理由反对使用它?
我没有成功使用__all__ 功能隐藏b 导入。我正在使用 PyCharm,但没有看到自动完成列表发生变化。
例如从我可以做的一些模块:
import a
自动完成框同时显示b 和f。
【问题讨论】:
标签: python