【发布时间】:2009-04-02 22:31:35
【问题描述】:
我有一个模块,其目的是定义一个名为“nib”的类。 (还有一些相关的类。)我应该如何调用模块本身? “笔尖”? “笔尖模块”?还有什么?
【问题讨论】:
我有一个模块,其目的是定义一个名为“nib”的类。 (还有一些相关的类。)我应该如何调用模块本身? “笔尖”? “笔尖模块”?还有什么?
【问题讨论】:
只是笔尖。使用大写 N 命名类 Nib。有关命名约定和其他样式建议的更多信息,请参阅 Python 样式指南 PEP 8。
【讨论】:
Client 的类,可以理解的是,我经常会创建我想调用client 的实例。但是根据您的约定,模块名称将是client,因此我总是必须将我的实例命名为不自然的名称,例如client_instance。您如何看待这个问题?
Client,那么它会与类名Client 发生冲突。由于只有 3 种可能的命名变体(client、Client 或 CLIENT),因此实例、类、模块或常量中的两个之间总是会发生冲突。我相信与类相比,您将模块命名为实例或常量的次数更少,因此是其他可能性的更好命名约定。它还会使从模块导入更具可读性,因为您通常导入类和常量而不是变量。
我会称之为 nib.py。而且我还会将这个类命名为 Nib。
在我正在处理的一个更大的 python 项目中,我们有很多模块,基本上定义了一个重要的类。类以大写字母开头。模块以小写的类命名。这会导致如下导入:
from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs
这有点像模仿 Java 的方式。每个文件一个类。但是有了额外的灵活性,如果有意义的话,您总是可以将另一个类添加到单个文件中。
【讨论】:
我知道从pythonic的角度来看我的解决方案不是很流行,但我更喜欢使用一个模块->一个类的Java方法,模块命名为类。 我确实理解 python 风格背后的原因,但我不太喜欢拥有一个包含很多类的非常大的文件。尽管可以折叠,但我发现浏览起来很困难。
另一个原因是版本控制:拥有大文件意味着您的提交往往会集中在该文件上。这可能会导致需要解决的冲突数量更多。您还会丢失提交修改特定文件(因此涉及特定类)的附加日志信息。相反,您会看到对模块文件的修改,只有提交注释才能了解所做的修改。
总结一下,如果您更喜欢 Python 哲学,请参考其他帖子的建议。如果您更喜欢类似 java 的理念,请创建一个包含类 Nib 的 Nib.py。
【讨论】:
spyder 或类似的编辑器查看类的摘要以帮助导航,并在两个窗格上打开具有相同文件的两个窗格。另外,请阅读 PEP8。 Python 用于编写 Python,Java 用于 Java,但 Python 不是 用于编写 Java。
笔尖很好。如有疑问,请参阅 Python 样式指南。
来自PEP 8:
包和模块名称 模块应该有简短的全小写名称。可以使用下划线 如果它提高了可读性,则在模块名称中。 Python 包应该 也有简短的全小写名称,尽管使用下划线是 气馁。
由于模块名称映射到文件名,并且某些文件系统是 不区分大小写并截断长名称,重要的是模块 名称选择相当短——这在 Unix 上不是问题, 但是当代码传输到旧的 Mac 或 Windows 版本,或 DOS。
当使用 C 或 C++ 编写的扩展模块具有随附的 Python 时 提供更高级别的模块(例如更面向对象) 接口,C/C++ 模块有一个前导下划线(例如_socket)。
【讨论】:
来自PEP-8: Package and Module Names:
模块应该有简短的全小写名称。下划线可以 如果它提高可读性,则在模块名称中使用。
Python 包 也应该有简短的全小写名称,尽管使用 不鼓励使用下划线。
当一个用 C 或 C++ 编写的扩展模块有一个伴随 提供更高级别的 Python 模块(例如,更面向对象) 接口,C/C++ 模块有一个前导下划线(例如_socket)。
【讨论】: