29

通常当我看到类定义时class Foo:,我总是看到它们以大写字母开头。

但是,列表[]、字典{}或其他一些内置类型不也是一个类吗?就此而言,输入 Python 的 IDLE 的所有内容都是自动以紫色进行颜色编码的关键字(使用 Window 的二进制分布),它本身就是一个类,对吗?

spam = list()

spam现在是一个实例list()

所以我的问题是,为什么 Python 允许我们首先做一些事情,比如list = list()当没有人这样做的时候。而且,为什么不是list = List()

该语言的开发人员是否决定不使用任何类型的约定,而大多数 Python 程序员确实如此命名他们的类?

4

5 回答 5

40

是的,大写开头的类是惯例,如PEP 8中所述。

您是正确的,许多内置类型不遵循此约定。这些是 Python 早期阶段的遗留物,当时用户定义的类和内置类型之间存在更大的差异。然而,用 C 语言编写的内置或扩展类型似乎仍然更可能使用小写名称(例如,numpy.array、 not numpy.Array)。

尽管如此,约定是在 Python 代码中为您自己的类使用大写首字母。

于 2013-02-20T06:59:53.790 回答
3

PEP8是代码风格的好去处。

为了解决您关于为什么list = list()有效的问题,list它只是全局命名空间中的一个名称,并且可以像任何其他变量一样被覆盖。

于 2013-02-20T06:58:52.600 回答
2

我认为唯一真正知道您问题的全部答案的人是BDFL。在 C 中实现的类型之外的约定肯定是使用大写字母(详见 PEP8)。然而,有趣的是,并非所有C 级类型都遵循约定(即Py_True, Py_False)。是的,它们是 Python 级别的常量,但它们都是PyTypeObjects。我很想知道这是否是唯一的区别,因此也是惯例的区别。

于 2013-02-20T06:56:50.093 回答
2

最终都是设计决策。

[...] 为什么 python 允许我们首先做类似的事情list = list()

https://www.python.org/dev/peps/pep-0020/说(也试试>>> import this

  • 简单胜于复杂。
  • 特殊情况不足以打破规则。

这将是一个特例。

[...] 为什么不是list = List()

https://www.python.org/dev/peps/pep-0008/#class-names说:

类名

类名通常应使用 CapWords 约定。

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

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

所有其他类都应该使用 CapWorlds 约定。由于list, object, 等是内置名称,它们遵循这个单独的约定

于 2017-10-15T09:12:21.913 回答
0

根据PEP 8,为 Python 开发人员提供了一套很好的指南:

几乎无一例外,类名都使用 CapWords 约定。内部使用的类另外还有一个前导下划线。

PEP 8 针对主要 Python 发行版中标准库的 Python 开发,但它们是值得遵循的明智指南。

于 2013-02-20T06:58:34.930 回答