模块的Python命名约定

Ram*_*hum 97 python naming-conventions

我有一个模块,其目的是定义一个名为"nib"的类.(以及一些相关的类.)我应该如何调用模块本身?"笔尖"?"nibmodule"?还要别的吗?

Ste*_*202 109

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

  • 你观察内置类型是否正确.不过,这些绝对是例外.标准库*中定义的大多数其他类都是*大写的. (4认同)
  • @Ray但是说惯例是命名模块`Client`,然后它会与类名`Client`冲突.由于只有3种可能的命名变体(`client`,`Client`或`CLIENT`),因此两个实例,类,模块或常量之间总会存在冲突.我相信,将模块命名为与实例或常量相同的次数少于类,因此是其他可能性的更好命名约定.它还使得从模块导入更具可读性,因为您通常导入类和常量而不是变量. (3认同)
  • 大多数Python项目是否遵循此约定?因为我注意到内置类是小写的,例如list,string等. (2认同)
  • 我认为这是正确的惯例,但它有一个固有的问题,至少在我看来.假设我有一个名为`Client`的类,可以理解的是我经常会创建一个我想称之为`client`的实例.但是根据你的约定,模块名称将是`client`,因此我总是必须将我的实例命名为像`client_instance`这样不自然的东西.你觉得这个问题怎么样? (2认同)
  • 内置小写的原因是暗示它们是用C而不是python实现的。 (2认同)

rin*_*ind 41

我称之为nib.py. 而且我也会把Nib命名为.

在我正在研究的一个更大的python项目中,我们有很多模块基本上定义了一个重要的类.类以大写字母开头.这些模块的命名方式类似于小写的类.这导致进口如下:

from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs
Run Code Online (Sandbox Code Playgroud)

这有点像模仿Java方式.每个文件一个类.但是,通过增加灵活性,如果有意义的话,你可以将另一个类添加到单个文件中.


Ste*_*ini 28

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

另一个原因是版本控制:拥有一个大文件意味着你的提交倾向于专注于该文件.这可能会导致需要解决更多的冲突.您还会丢失提交修改特定文件的其他日志信息(因此涉及特定的类).相反,您会看到对模块文件的修改,只有提交注释才能理解已完成的修改.

总结一下,如果您更喜欢python哲学,请查看其他帖子的建议.如果您更喜欢类似java的哲学,请创建一个包含Nib类的Nib.py.

  • @IoannisFilippidis:如果我必须将模块的所有类放在我通常管理的代码大小的单个文件中,我甚至无法打开文件,与其他同事的冲突会飙升,我的老板会吐我的提出它,面对(比喻,就是这样).单个文件方法无法扩展,PEP-8与否. (5认同)
  • 提到的问题是由编辑器的限制和版本控制工具的使用引起的,而不是由语言或编程风格引起的。每个文件一个类对代码结构有害。使用 `spyder` 或类似的编辑器查看您的类的摘要以帮助导航,并在两者上打开具有相同文件的两个窗格。另外,请阅读 PEP8。Python 是为了编写 Python,而 Java 是为了 Java,但 Python 不是为了编写 Java。 (2认同)
  • @StefanoBorini:PEP8不会要求单个文件方法.每个模块一个类和每个(代码单元)一个文件是非常广泛的两个极端.如果您看到无法管理的大文件大小,每个模块只有一个文件,您应该考虑修改将程序包分解为模块的方法. (2认同)

the*_*edz 21

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

PEP 8:

包和模块名称模块应具有简短的全小写名称.如果提高可读性,则可以在模块名称中使用下划线.Python包也应该有简短的全小写名称,但不鼓励使用下划线.

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

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


Ehs*_*san 6

来自PEP-8:包和模块名称

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

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

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