如果Python的约定是首字母大写类,为什么list()不大写?它难道不是类吗?
我经常看到类的定义,比如 class Foo:
,它们的名字通常都是以大写字母开头。
但是,像列表 []
或字典 {}
这些内置类型,难道不也是类吗?再说了,在Python的IDLE中输入的所有内容,像是那些自动变成紫色的关键字,不都是类吗?
比如说 spam = list()
这时候 spam
就是 list()
的一个实例。
所以我想问的是,为什么Python允许我们先做 list = list()
这样的事情,虽然可能没有人会这么做?还有,为什么不是 list = List()
呢?
难道这个语言的开发者决定不使用任何命名规则,而大多数Python程序员却都习惯用这样的方式来命名他们的类吗?
5 个回答
我觉得,真正知道你问题全部答案的,可能只有那个被称为终身仁慈独裁者的人。除了C语言中实现的类型,通常的约定是使用大写字母(这在PEP8中有详细说明)。不过,有趣的是,并不是所有C级别的类型都遵循这个约定(比如Py_True
和Py_False
就不遵循)。没错,它们在Python层面上是常量,但它们都是PyTypeObject
类型。我很好奇,这是否是唯一的区别,因此导致了约定上的不同。
这些最终都是设计上的选择。
[...] 为什么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 上说:
### 类名
类名通常应该使用大写字母开头的单词风格。
在接口有文档说明并主要作为可调用对象使用的情况下,可以使用函数的命名风格。
注意,内置名称有一个单独的命名规则:大多数内置名称是单个单词(或两个单词合在一起),只有异常名称和内置常量使用大写字母开头的单词风格。 [强调是我的]
其他所有类都应该使用大写字母开头的单词风格。像 list
、object
等这些是内置名称,所以它们遵循这个单独的规则。
没错,类名首字母大写是一个约定,这在PEP 8中有说明。
你说得对,很多内置类型并没有遵循这个约定。这些类型是早期Python的遗留产物,那时候用户自定义的类和内置类型之间的区别更大。不过,似乎用C语言写的内置类型或扩展类型更倾向于使用小写名字(比如numpy.array
,而不是numpy.Array
)。
尽管如此,在你的Python代码中,自己定义的类名还是应该使用首字母大写的约定。