如果Python的约定是首字母大写类,为什么list()不大写?它难道不是类吗?

36 投票
5 回答
29063 浏览
提问于 2025-04-17 16:28

我经常看到类的定义,比如 class Foo:,它们的名字通常都是以大写字母开头。

但是,像列表 [] 或字典 {} 这些内置类型,难道不也是类吗?再说了,在Python的IDLE中输入的所有内容,像是那些自动变成紫色的关键字,不都是类吗?

比如说 spam = list()

这时候 spam 就是 list() 的一个实例。

所以我想问的是,为什么Python允许我们先做 list = list() 这样的事情,虽然可能没有人会这么做?还有,为什么不是 list = List() 呢?

难道这个语言的开发者决定不使用任何命名规则,而大多数Python程序员却都习惯用这样的方式来命名他们的类吗?

5 个回答

3

我觉得,真正知道你问题全部答案的,可能只有那个被称为终身仁慈独裁者的人。除了C语言中实现的类型,通常的约定是使用大写字母(这在PEP8中有详细说明)。不过,有趣的是,并不是所有C级别的类型都遵循这个约定(比如Py_TruePy_False就不遵循)。没错,它们在Python层面上是常量,但它们都是PyTypeObject类型。我很好奇,这是否是唯一的区别,因此导致了约定上的不同。

4

这些最终都是设计上的选择。

[...] 为什么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 上说:

### 类名

类名通常应该使用大写字母开头的单词风格。

在接口有文档说明并主要作为可调用对象使用的情况下,可以使用函数的命名风格。

注意,内置名称有一个单独的命名规则:大多数内置名称是单个单词(或两个单词合在一起),只有异常名称和内置常量使用大写字母开头的单词风格。 [强调是我的]

其他所有类都应该使用大写字母开头的单词风格。像 listobject 等这些是内置名称,所以它们遵循这个单独的规则

47

没错,类名首字母大写是一个约定,这在PEP 8中有说明。

你说得对,很多内置类型并没有遵循这个约定。这些类型是早期Python的遗留产物,那时候用户自定义的类和内置类型之间的区别更大。不过,似乎用C语言写的内置类型或扩展类型更倾向于使用小写名字(比如numpy.array,而不是numpy.Array)。

尽管如此,在你的Python代码中,自己定义的类名还是应该使用首字母大写的约定。

撰写回答