【问题标题】:Should Python class filenames also be camelCased?Python 类文件名也应该是驼峰式吗?
【发布时间】:2017-06-26 22:12:12
【问题描述】:

我知道 Python 中的类通常使用 camelCase 进行大小写。

包含类的文件也是驼峰式的,特别是如果文件只包含类,这也是正常的约定吗?

例如,类className 是否也应该存储在className.py 中而不是class_name.py 中?

【问题讨论】:

标签: python naming-conventions filenames camelcasing


【解决方案1】:

以下答案主要来自this answer

如果您要遵循 PEP 8,则应坚持全小写名称,并带有可选的下划线。

引用PEP 8's naming conventions for packages & modules

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

对于课程:

类名通常应使用 CapWords 约定。

模块、类和包之间的区别参见this answer

Python 模块只是一个 Python 源文件,它可以公开类、函数和全局变量。

【讨论】:

  • 名称应该使用单数还是复数形式?
  • @guival 我认为是单数,但该一般规则可能有例外。我不知道任何像 PEP 这样官方的关于多元化的事情,但你可以找到关于命名风格最佳实践的其他讨论,比如这个:softwareengineering.stackexchange.com/questions/75919/…
【解决方案2】:

官方约定是文件名全部使用小写(正如其他人已经声明的那样)。但是,没有提到原因……

由于 Python 可以跨平台工作(并且以这种方式使用它很常见),但文件系统在使用大小写方面有所不同,因此最好只消除替代情况。例如,在 Linux 中,可以将 MyClass.py 和 myclass.py 放在同一个目录中。在 Windows 中并非如此!

在相关说明中,如果您在 git 存储库中有 MyClass.py 和 myclass.py,或者甚至只是更改同一个文件的大小写,那么当您从 Linux 和 Windows 推送/拉出时,git 可能会表现得很时髦。

而且,虽然几乎没有主题,但在同一方面,SQL 也有这些相同的问题,不同的标准和配置可能允许也可能不允许表名使用大写。

我个人觉得即使在文件名上阅读 TitleCasing / camelCasing 也会更愉快,但是当你做任何可以跨平台工作的事情时,最安全的是不要这样做。

【讨论】:

  • 如何在 Linux 中将文件名全部设为小写以避免意外使用 CapWords 样式的文件名?如果问题是操作系统允许使用不同大小写但字母相同的文件名,那么解决方案是与您选择的任何命名约定(全部小写或 CapWords-case)保持一致,而不是完全避免大写。
  • 如何在 Linux 中“使用全小写避免意外出现 CapWords 样式的文件名”冲突?它没有。如果您不小心,您可能会以任何一种方式制造此类问题。 Python 的官方标准以及我在其他跨平台语言中看到的库的官方标准是全部使用小写字母。我在这里为超出偏好的推理提供了一个实用的解释。使用全部小写 one 意味着 缓解 这个问题。我自己经常不遵守这个“规则”,因为我不喜欢它。在极少数情况下,它会回来咬我。
【解决方案3】:

类名和包含该类的文件的命名约定有所不同。这种误解可能来自像 java 这样的语言,每个类都有一个文件是很常见的。

在 python 中,每个模块可以有多个类(一个简单的 .py 文件)。此模块/文件中的类应根据类命名约定进行调用:类名通常应使用 CapWords 约定。 包含此类的文件应遵循模块命名约定:模块应具有简短的全小写名称。如果提高可读性,可以在模块名称中使用下划线。

=> CamelCase 应该在文件 camelcase.py(或 camel_case.py 如果需要)中

【讨论】:

    【解决方案4】:

    我的问题是,拥有该文件是否也是正常的约定? 包含类也是驼峰式的,特别是如果文件只有 包含类

    简短回答:不。

    更长的答案:应该全部小写并根据需要下划线。

    来自PEP8 "Package and Module Names"

    模块应该有简短的全小写名称。下划线可以 如果它提高可读性,则在模块名称中使用。 Python 包 还应该有简短的全小写名称,尽管使用 不鼓励使用下划线。

    如果您不清楚 module 是什么:

    模块是包含 Python 定义和语句的文件。这 文件名是后缀.py的模块名。

    【讨论】:

      猜你喜欢
      • 2012-05-14
      • 2010-12-09
      • 1970-01-01
      • 2018-04-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      相关资源
      最近更新 更多