模块的Python命名约定


Answers:


110

只是笔尖。将类Nib命名为大写N。有关命名约定和其他样式建议的更多信息,请参见Python样式指南PEP 8


2
大多数Python项目是否遵循此约定?因为我注意到内置类是小写字体,如列表,字符串,等等
拉姆Rachum

4
您会发现内置类型正确。这些绝对是例外。标准库定义的大多数其他类大写。
Stephan202

2
我以为这是正确的约定,但是它有一个固有的问题,至少在我看来。说我有一个叫做的类Client,并且可以理解的是,我经常会创建我想调用的实例client。但是根据您的约定,模块名称为client,因此我总是必须用不自然的名称来命名实例client_instance。您如何看待这个问题?

3
@Ray但是说惯例是要命名模块Client,然后它将与类名冲突Client。由于仅存在3个可能的命名变体(clientClientCLIENT)总会有两个实例,类,模块或常数之间的冲突。我相信与类相比,将模块命名为实例或常量的次数更少,因此是其他可能性更好的命名约定。由于通常导入类和常量而不是变量,因此这也使从模块的导入更易读。
Ted Klein Bergman

2
内置小写的原因是暗示它们是用C而不是python实现的。
喀拉

41

我称它为nib.py。我也将其命名为Nib类。

在我正在处理的一个较大的python项目中,我们有许多模块定义了一个重要的类。类以大写字母开头。模块的名称类似于小写的类。这导致如下所示的导入:

from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs

有点像模拟Java方式。每个文件一个类。但是,通过增加的灵活性,您可以在合理的情况下始终将另一个类添加到单个文件中。


27

我知道我的解决方案从pythonic的角度来看不是很流行,但是我更喜欢使用Java的方法,即一个模块->一个类,并将模块命名为该类。我确实了解python样式背后的原因,但是我不太喜欢包含很多类的非常大的文件。尽管折叠,但我发现很难浏览。

另一个原因是版本控制:拥有大文件意味着您的提交倾向于集中在该文件上。这有可能导致解决大量冲突。您还将丢失提交修改特定文件(因此涉及特定类)的其他日志信息。取而代之的是,您看到了对模块文件的修改,仅带有提交注释以了解已进行了哪些修改。

总结一下,如果您喜欢python原理,请参考其他文章的建议。如果您更喜欢类似Java的哲学,请创建一个包含Nib类的Nib.py。


1
提到的问题是由于编辑器的限制以及版本控制工具的使用而不是语言或编程风格引起的。每个文件一个类对代码结构有害。使用spyder或类似的编辑器查看类的摘要以帮助导航,并在两个窗口上打开具有相同文件的两个窗格。另外,请阅读PEP8。Python用于编写Python,Java用于Java,但是Python 用于编写Java。
Ioannis Filippidis 2015年

5
@IoannisFilippidis:如果必须将模块的所有类以通常管理的代码大小放在一个文件中,则我什至无法打开该文件,与其他同事的冲突会激增,而我的老板会吐口水面对(象征性地就是这样)提出建议。单个文件方法无法缩放(PEP-8不能缩放)。
Stefano Borini,2015年

2
@StefanoBorini:PEP8不要求使用单个文件方法。每个模块一个类,每个(代码单元)一个文件是非常广泛的两个极端。如果看到每个模块一个文件的文件太大而无法管理,那么您可能应该考虑修改将软件包拆分为模块的方法。
Chintalagiri Shashank 2015年

22

笔尖很好。如有疑问,请参阅Python样式指南。

PEP 8

程序包和模块名称模块应使用简短的全小写名称。如果模块名称可以提高可读性,则可以在模块名称中使用下划线。尽管不鼓励使用下划线,但Python软件包也应使用短小写全名。

由于模块名称已映射到文件名,并且某些文件系统不区分大小写,并且截断了长名称,因此,将模块名称选择为相当短是很重要的-在Unix上这不是问题,但可能是代码传输到较旧的Mac或Windows版本或DOS时出现问题。

当用C或C ++编写的扩展模块具有随附的Python模块提供更高级别(例如,面向对象)的接口时,C / C ++模块具有下划线(例如_socket)。


1
嗯...这让我不寒而栗。我在包/模块中使用下划线前缀表示完全不同的内容(打算使用monty python参考)。
Stefano Borini,2009年

0

PEP-8:程序包和模块名称

模块应使用简短的全小写名称。如果模块名称可以提高可读性,则可以在模块名称中使用下划线。

尽管不鼓励使用下划线,但Python软件包也应使用短小写全名。

当用C或C ++编写的扩展模块具有随附的Python模块提供更高级别(例如,面向对象)的接口时,C / C ++模块具有下划线(例如_socket)。


-3

python中的foo模块等效于Java中的Foo类文件

要么

python中的foob​​ar模块等同于Java中的FooBar类文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.