这是一个概念性的问题,而不是一个实际的问题,我想问一个伟大的互联网大群人的反馈意见。Python - 我应该使用下划线别名吗?
# 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,没有看到自动完成列表的变化。
E.g.从一些模块,我可以这样做:
import a
并自动完成框同时显示b
和f
。
我想我是在一些误解之下,我以为'__all__'只涉及'from一个import *'模式?这是我从链接中得出的结论,也是我通过SO搜索过的。 在PyCharm当我做一个'__all__'进入它不会改变自动完成框,当我做一个正常的'进口了' 例如为: 模块: 从。进口b __all__ = [ 'F'] F =拉姆达:无 (模块B是空的)从另一个模块我可以做现在 :从 。导入一个 自动完成框显示'b'和'f'。 – 2014-09-28 00:44:57
@JonLauridsen:'from modulename import *'模式是'__all__'的一个*用例。如果PyCharm仍然为'__all__'中未列出的名称提供自动完成,这可能被认为是PyCharm中的一个错误。 – 2014-09-28 00:49:13
嗯,那样做是的.. 好吧,我创建了一个缺陷@ http://youtrack.jetbrains.com/issue/PY-14022,我们将看到会发生什么!谢谢。 – 2014-09-28 00:55:55