模块的Python命名约定

模块的Python命名约定,python,naming-conventions,Python,Naming Conventions,我有一个模块,其目的是定义一个名为“nib”的类。(还有一些相关的类。)我应该如何调用模块本身?“笔尖”?“nibmodule”?还有什么吗?只要一点。将类命名为Nib,大写N。有关命名约定和其他样式建议的更多信息,请参阅Python样式指南。我将其命名为Nib.py。我还想把这个类命名为Nib 在我正在进行的一个更大的python项目中,我们有很多模块,基本上定义了一个重要的类。类以大写字母开头命名。模块的名称与类的名称类似,以小写形式命名。这将导致如下导入: from nib import

我有一个模块,其目的是定义一个名为“nib”的类。(还有一些相关的类。)我应该如何调用模块本身?“笔尖”?“nibmodule”?还有什么吗?

只要一点。将类命名为Nib,大写N。有关命名约定和其他样式建议的更多信息,请参阅Python样式指南。

我将其命名为Nib.py。我还想把这个类命名为Nib

在我正在进行的一个更大的python项目中,我们有很多模块,基本上定义了一个重要的类。类以大写字母开头命名。模块的名称与类的名称类似,以小写形式命名。这将导致如下导入:

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

这有点像模仿Java的方式。每个文件一个类。但由于增加了灵活性,您可以始终在一个文件中添加另一个类(如果有意义)。

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

发件人:

包和模块名称 模块应该有简短的、全小写的名称。可以使用下划线 如果提高了可读性,则在模块名称中。Python包应该 也可以使用短的、全小写的名称,尽管下划线的使用很简单 气馁

因为模块名映射到文件名,而某些文件系统 不区分大小写并截断长名称,模块 名称应选择得相当短--在Unix上这不会是问题, 但当代码被传输到较旧的Mac或PC机时,可能会出现问题 Windows版本或DOS

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


我知道从pythonic的角度来看,我的解决方案不是很受欢迎,但我更喜欢使用一个模块->一个类的Java方法,将模块命名为类。 我确实理解python风格背后的原因,但我不太喜欢有一个包含很多类的非常大的文件。尽管折叠,我还是觉得很难浏览

另一个原因是版本控制:拥有一个大文件意味着您的提交倾向于集中在该文件上。这可能导致需要解决的冲突数量增加。您还丢失了提交修改特定文件(因此涉及特定类)的附加日志信息。相反,您看到的是对模块文件的修改,只有commit注释可以理解所做的修改

总之,如果您更喜欢python哲学,请参考其他帖子的建议。如果您更喜欢类似java的原理,请创建一个包含类Nib的Nib.py。

来自:

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

Python包也应该有简短的、全小写的名称,尽管 不鼓励使用下划线

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


大多数Python项目都遵循这个约定吗?因为我注意到内置类是小写的,例如list、string等。您可以使用w.r.t。内置类型是正确的。不过,这些显然是例外。标准库中定义的大多数其他类都是大写的。我认为这是正确的约定,但它存在一个固有的问题,至少在我看来是这样。假设我有一个名为
Client
的类,可以理解的是,我经常创建我想调用
Client
的实例。但是根据您的约定,模块名称将是
client
,因此我总是不得不将实例命名为一些不自然的名称,如
client\u instance
。您对这个问题有何看法?@Ray但是如果按照惯例将模块命名为
Client
,那么它将与类名
Client
冲突。由于只有3种可能的命名变体(
client
client
client
),因此实例、类、模块或常量之间始终存在冲突。我相信,与类相比,将模块命名为实例或常量的次数更少,因此是其他可能性中更好的命名约定。它还将使从模块导入更具可读性,因为您通常会导入类和常量而不是变量。内置代码是小写的原因是暗示它们是用C而不是python实现的。提到的问题是由于编辑器中的限制以及版本控制工具的使用,而不是语言或编程风格。每个文件一个类对代码结构有害。使用
spyder
或类似编辑器查看类的摘要以帮助导航,并在两个窗格上打开两个具有相同文件的窗格。另外,请阅读PEP8。Python是用来写Python的,Java是用来写Java的,但Python不是用来写Java的。@IoannisFilippidis:如果我必须把一个模块的所有类都按照我通常管理的代码大小放在一个文件中,我甚至无法打开该文件,与其他同事的冲突会急剧上升,我的老板会朝我脸上吐口水(打个比方说,就是这样)建议它。单文件方法不可扩展,PEP-8与否。@StefanoBorini:PEP8不要求单文件方法。每个模块一个类,每个(代码单元)一个文件如果你看到的是每个模块都有一个文件的不可管理的大文件大小,那么你应该考虑修改你的方法来把一个包分解成模块。