导入驼峰式命名为小写是否符合PEP8规范?

11
根据PEP8,模块应该使用小写字母。然而,一些流行的模块(例如Gtk)遵循CamelCase约定。
为了拥有Pythonic代码库并减少此策略违规的泄漏,似乎以下是处理此问题的一种清晰方式:
import CamelcasedModule as camelcased_module

代码检查工具,例如pep8-naming,声称这种做法违反了PEP8,并引发N813错误。

由于我未能在PEP8中找到任何直接相关的内容,因此我想知道为了遵循Python之禅应该采取哪种方式。

附注: 先前这个问题以Gtk作为例子:

from gi.repository import Gtk as gtk

这是误导性的,因为Gtk是一个类而不是模块,因此不适用于此问题。为了透明和因为对此的答案仍然有用,这里提及一下。


有时,某些模块使用驼峰命名法是由于历史原因。通常情况下,这些模块是从Java或C++中移植过来的,保持原始命名约定是有道理的。在这种情况下,出于一致性考虑,我不会改变大小写。 我认为pep8的这一部分很相关 - Håken Lid
@Thomas Plaskota等:我该如何处理这个问题?虽然您已经回答/澄清了我的Gtk示例错误,但问题涉及到一个更一般的情况(实际上,GTK并不是这个例子)。我应该将Thomasz的答案保留为已接受的答案,还是应该简单地重写问题,不再使用Gtk作为示例? - Elbenfreund
如果您找到了一个更好的驼峰式模块名称示例,可以编辑问题并添加该示例,解释为什么进行了编辑。如果您想保留Thomasz答案的上下文,则无需删除Gtk示例。 - Håken Lid
@Elbenfreund 如果你找到更好的例子,只需在编辑中添加它,我们将尝试回答那个问题(或者也可以同时回答)。 - Tomasz Plaskota
@Thomasz Plaskota:为了清理问题并区分两个方面,我现在使用了一个虚构的例子。如果有人发现了真实的情况,请随意编辑。 - Elbenfreund
有趣的是,在Python文档中,他们给出的一个例子包括使用驼峰命名法导入常量('ElementTree' -> 'ET')。奇怪的是,Python文档似乎违反了PEP8规范...? - kasimir
3个回答

6

Gtk是一个类,而不是模块。类名应该使用CapWords约定,具体请参见此处

您可以在这里了解更多信息。


是的!模块名称应该是gi.repository - 很好的发现! - Dilettant
1
嗯,有点尴尬。感谢您指出这一点。我想至少有些好处:在SO上得到了明确而简洁的答案 :) - Elbenfreund

4
我赞同Tomasz Plaskota的答案,这确实是一种反模式,我想做出修改:
在pep8的“公共和内部接口”章节/部分中:
导入的名称应始终被视为实现细节。除非它们是包含模块API的显式文档化部分(例如os.path或一个公开子模块功能的软件包的__init__模块),否则其他模块不得依赖于对这些导入名称的间接访问。
否则,很明显,即使标准库也在不断地进行清理,将类名改为CamelCase,将模块名改为lower_underscore_case...
起初,我只是浏览了问题,并更多地存储了尝试的结果:
import Gtk as gtk

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

import very_impressive_hierarchical_name_for_tools as our_tools

或者像datetime模块中datetime类的自我覆盖有趣案例中一样:

import datetime as dt

然后在实际的客户端代码中可以像这样使用:

a_datetime = dt.datetime.now()

1
最近我经常使用“from datetime import datetime as DateTime”这句代码。我可能要去 Python 地狱了。 - Brett Elliot

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接