【问题标题】:What is the capitalization standard for class names in the Python Standard Library?Python 标准库中类名的大小写标准是什么?
【发布时间】:2017-01-01 04:50:35
【问题描述】:

Python 标准库类的规范似乎是类名是小写的——这似乎适用于诸如 strint 之类的内置函数以及作为标准库模块一部分的大多数类必须导入的,例如 datetime.datedatetime.datetime

但是,enum.Enumdecimal.Decimal 等某些标准库类是大写的。乍一看,当类的名称与模块名称相同时,它们似乎是大写的,但并非在所有情况下都适用(例如datetime.datetime)。

Python 标准库中类名的大写约定背后的基本原理/逻辑是什么?

【问题讨论】:

  • @VVK,我已经更新了更多详细信息的答案,如果这有帮助,请告诉我。如果这很好,请删除反对票。谢谢

标签: python naming-conventions


【解决方案1】:

开发人员指南的Key Resources 部分将PEP 8 列为样式指南。


来自 PEP 8 命名约定,强调我的。

Python 库的命名约定有点混乱,所以 我们永远不会完全一致——尽管如此,这里有 当前推荐的命名标准。新模块和包 (包括第三方框架)应该写入这些 标准,但是现有的库有不同的风格, 首选内部一致性


Also from PEP 8

风格指南是关于一致性的。与本样式指南的一致性 很重要。项目内部的一致性更为重要。 一个模块或功能内的一致性是最重要的。 ...

忽略特定准则的其他一些充分理由:

  • 为了与也破坏它的周围代码保持一致(可能是出于历史原因)——尽管这也是一个清理的机会 搞砸别人的烂摊子(真正的 XP 风格)。
  • 因为有问题的代码早于指南的引入,并且没有其他理由修改该代码。

您可能永远不会知道为什么标准库命名约定与 PEP 8 冲突,但在新事物甚至您自己的项目中遵循它可能是个好主意。

【讨论】:

  • BeautifulSoup 致力于遵循当前的命名标准,同时也向后兼容。也许标准库也应该如此?
  • 是的,我已经看到关于这个和标准库的 cmets。我很高兴能够指向示例的标准库代码 - 一般而言。
【解决方案2】:

Pep 8 被许多 Python 开发人员认为是标准样式指南。这建议使用 CamelCase/CapWords 命名类。

在接口被记录并主要用作可调用的情况下,可以使用函数的命名约定。

请注意,内置名称有一个单独的约定:大多数内置名称是单个单词(或两个单词一起运行),CapWords 约定仅用于异常名称和内置常量。

查看此link 了解 PEP8 命名约定和标准。

datetime 是标准库的一部分,

Python 的标准库非常广泛,提供了广泛的功能,如下面的长目录所示。该库包含内置模块(用 C 编写),提供对系统功能的访问,例如 Python 程序员无法访问的文件 I/O,以及用 Python 编写的提供标准化的模块日常编程中出现的许多问题的解决方案。

在某些情况下,如 sklearn、nltk、django,包名都是小写的。这个link 会带你去那里。

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

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

我希望这涵盖了所有问题。

【讨论】:

  • 知道了,所以标准库中的 CamelCased 类名只是遗留约定的遗物。谢谢。我熟悉标准命名约定......只是不确定我是否缺少标准库的其他规则。
  • PEP8 仍然建议类名使用驼峰式。不过,大多数基本的标准库类名都有小写。
  • 你的陈述站不住脚。你从哪里得到这些信息?您提到的 PEP8 声明完全相反:“Class names should normally use the CapWords convention.”他们只是对内置函数使用不同的约定(没有真正的原因)。 “请注意,内置名称有一个单独的约定:大多数内置名称是单个单词(或两个单词一起运行),CapWords 约定仅用于异常名称和内置常量。”
  • 感谢杰夫。我在某处读到了snake_case 的东西。我现在在任何地方都找不到那个文件。谢谢指正。
  • 感谢您的更正。拉胡尔,我删除了接受的答案。这并不能完全回答我的问题。 datetime.datetime 是标准库的一部分,但不是内置的,但它遵循 CamelCase 标准。 enum.Enum 也是标准库的一部分,但不是构建它,但它确实遵循 CamelCase 标准。这是什么原因?
猜你喜欢
  • 2019-02-21
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2011-07-21
  • 2011-03-27
  • 2021-03-26
  • 1970-01-01
相关资源
最近更新 更多