PEP 8如何命名一个名为首字母缩写词的类?

时间:2010-05-17 23:05:42

标签: python coding-style naming-conventions

我尝试遵循Python代码的样式指南(也称为PEP 8)。因此,命名类的首选方法是使用CamelCase:

  

几乎无例外,类名   使用CapWords惯例。内部使用的类别还有一个主要的下划线。

如果我的班级名称是由两个首字母缩略词组成的(如果英语应该大写),我怎样才能与PEP 8保持一致。例如,如果我的班级名称是'NASA JPL',你会说出什么名字?:

class NASAJPL():  # 1
class NASA_JPL(): # 2
class NasaJpl():  # 3

我正在使用#1,但它看起来很奇怪; #3看起来很奇怪,#2似乎违反了PEP 8.

8 个答案:

答案 0 :(得分:62)

PEP-8确实涵盖了这一点(至少部分):

  

注意:在CapWords中使用缩写时,请将缩写的所有字母大写。因此HTTPServerError优于HttpServerError

根据PEP-8,我认为NASAJPL()是推荐的名称。

我个人认为NasaJpl()easiest to scan,因为大写字母很容易标记单词边界,并赋予名称独特的形状。

答案 1 :(得分:22)

正如其他人所说,NASAJPL可能是PEP-8批准的表格。

但是,相反,我可能会使用NasaJPL。因为如果你正在阅读它,你会将“NASA”作为单个单词发音,而将“JPL”发音为单词。

你可以提出一个与PEP-8一致的论点,因为“NASA”是一个缩写,但“JPL”是一个缩写(或者是初始主义,如果你想得到pedantic)。

答案 2 :(得分:10)

在这个特殊情况下,

#1看起来很好(如果它是真的的缩写)。出于好奇,它代表什么(以及类实例究竟是什么,也许module可能是更合适的除数)?

class NASAJPL:

编辑:当您组合两个首字母缩写词时,您希望将功能划分为模块(您永远不知道何时将下一个功能添加到您的程序中):

from NASA import JPL
from NASA import ARC

答案 3 :(得分:8)

我也在一个首字母缩略词的环境中工作。我更喜欢表单#3,因为即使它是缩写词的缩写部分,它也清楚地描述了部分名称。当名称的一部分是首字母缩略词而部分是单词时,它也避免了混淆。

答案 4 :(得分:6)

你做对了。

如果ChristophDsplit it into a module hierarchy建议不是一个可行的选项,那么我建议您的#2表单(class NASA_JPL ():)是最清晰的,PEP-8应该是该死的

不,真的......

那就是说...我不认为PEP-8需要被诅咒才能使用该选项并且仍然坚持其核心原则。正如你在原始问题中指出的那样,“CamelCase类名”指南的第一句开头:

  

几乎无一例外,[...]

PEP-8的“基本原则”声明,正如Dan提到的"A Foolish Consistency [...]"一致,宣布可读性和可理解性是PEP-8建议的主要目标。 PEP-8是为这些目标服务的既定成功模式的集合。

关于将PEP-8应用于现实的

Emerson ......

从根本上说,任何系统都有必然与整体特征不一致的方面。当系统对样式指南的建议进行良好且一致的使用时,任何不一致都将是有意识的必要性的响应。 (我认为保持角落案件的易读性是必要的。)

当以这种方式处理时,这些不一致,反直觉,加强了整体的凝聚力,而不是破坏它。

PEP-8更简洁地说明了这一点(因此,更有用:) :):

  

但最重要的是:知道何时不一致 - 有时是风格   指南只是不适用。如有疑问,请使用您的最佳判断。看   在其他例子,并决定什么看起来最好。并且毫不犹豫地问!

     

打破特定规则的两个充分理由:

     
      
  1. 应用规则会降低代码的可读性,即使对于习惯阅读遵守规则的代码的人也是如此。

  2.   
  3. 与周围的代码保持一致也会破坏它(可能是出于历史原因) - 尽管这也是一个清理别人的混乱的机会(真正的XP风格)。

  4.   

答案 5 :(得分:5)

我倾向于使用#3。起初看起来很奇怪,但你(有点)习惯了。经过长时间的困扰,在一连串的首字母缩略词中,我就这样走了,例如, NPCAIXMLParser就是其中之一。我认为NpcAiXmlParser更容易阅读并且从那时起就一直这样做,即使看到这些低级的东西有时看起来仍然很奇怪。

就“标准”而言,我倾向于将这些实体视为“单词”,并将其视为资本化,因为我会将任何其他单词大写。例如。如果我有一个代表某个NPC(非玩家角色)的局部变量,我会将其命名为'npc'而不是'nPC'。

关于PEP-8,我不同意这一说法;我发现这个词的最后拼写更可取。

  

注意:使用缩写时   CapWords,将所有字母大写   的缩写。从而   HTTPServerError优于   HttpServerError。

答案 6 :(得分:3)

1号对我来说太难读了 - 没有办法说出它是两个缩略词。

2号违反PEP8,但看起来不错。记住“愚蠢的一致性是小脑袋的大人物”:)

我最喜欢3号,但我做了很多C#编程 - 这就是你应该用C#做的。

答案 7 :(得分:2)

这取决于首字母缩略词。另一种选择是class NASAJpl():,这使得“NASA”似乎是主要部分,“JPL”是从属部分。