是否符合PEP8以将CamelCase导入为小写?

时间:2016-06-02 10:59:12

标签: python pep8

根据PEP8模块应该是小写的。然而,一些流行的(例如Gtk)遵循CamelCase惯例。

为了拥有pythonic代码库并减少此违反政策的漏洞,以下似乎是一种干净的方法来解决这个问题:

import CamelcasedModule as camelcased_module

pep8-naming等Linters声称这种做法违反了PEP8并导致N813错误。

由于我没有在PEP8中找到任何直接通道来解决这个问题,所以我想知道要走哪条道路才能忠于蟒蛇的禅宗。

Sitenote: 以前这个问题以Gtk为例:

from gi.repository import Gtk as gtk

这是误导性的,因为Gtk是一个类而不是一个模块,因此不适用于该问题。为了透明度,因为这个问题的答案可能仍然有用,这里提到它。

3 个答案:

答案 0 :(得分:5)

Gtk是一个类而不是一个模块。 Class names应使用CapWords惯例。

您可以详细了解here

答案 1 :(得分:3)

我在Tomasz Plaskota的回答中说这确实是反模式,我想修改:

在pep8的“公共和内部接口”一节/

  

导入的名称应始终被视为实施细节。其他模块不能依赖于对这些导入名称的间接访问,除非它们是包含模块的API的明确记录的部分,例如os.path或包的 init 模块,它公开子模块的功能。

否则很明显,即使是标准库也会稳定地清理类CamelCase和模块lower_underscore_case ......

起初我只是略过了这个问题并存储了更多的试用版:

import Gtk as gtk

导入时的别名我经常在经典的本地快捷方式用例中使用 - 更多:

将very_impressive_hierarchical_name_for_tools导入为our_tools

或者像datetime模块中着名的自我覆盖乐趣案例一样:

import datetime as dt

然后能够在实际的客户端代码中使用like:

a_datetime = dt.datetime.now()

答案 2 :(得分:0)

您可以这样做,以消除警告:

from gi.repository import Gtk
gtk = Gtk

你为什么要这样做?有时候保留原来的命名真的很不方便。我的用例是 python2/python3 兼容代码。考虑这个例子:

代替:

try:
    import pickle
except ImportError:
    import cPickle as pickle # pycharm will complain about import camelcase as lowercase

# do_something_with_pickle_later()

我写道:

try:
    import pickle
except ImportError:
    import cPickle
    pickle = cPickle # pycharm will not complain about this.

# do_something_with_pickle_later()