【问题标题】:If the convention in Python is to capitalize classes, why then is list() not capitalized? Is it not a class?如果 Python 中的约定是大写类,那么为什么 list() 不大写?不是一堂课吗?
【发布时间】:2013-02-20 06:55:00
【问题描述】:

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

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

spam = list()

spam 现在是 list() 的一个实例

所以我的问题是,为什么 Python 允许我们首先做类似list = list() 的事情,而可能没有人这样做。而且,为什么不是list = List()

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

【问题讨论】:

标签: python coding-style naming-conventions


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    PEP8 是代码风格的去处。

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

    【讨论】:

    • datetime.date 上课怎么样?
    • @Grienders 基本上任何东西都可以在 Python 中被覆盖,因为所有东西都是一个名称,它也可以指向你想要的任何东西。
    【解决方案3】:

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

    【讨论】:

      【解决方案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 说:

      类名

      类名通常应使用 CapWords 约定。

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

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

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-11
          • 2015-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多