我尝试遵循Python代码的样式指南(也称为PEP 8)。因此,命名类的首选方法是使用CamelCase:
几乎无例外,类名 使用CapWords惯例。内部使用的类别还有一个主要的下划线。
如果我的班级名称是由两个首字母缩略词组成的(如果英语应该大写),我怎样才能与PEP 8保持一致。例如,如果我的班级名称是'NASA JPL',你会说出什么名字?:
class NASAJPL(): # 1
class NASA_JPL(): # 2
class NasaJpl(): # 3
我正在使用#1,但它看起来很奇怪; #3看起来很奇怪,#2似乎违反了PEP 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)
如果ChristophD的split 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应用于现实的从根本上说,任何系统都有必然与整体特征不一致的方面。当系统对样式指南的建议进行良好且一致的使用时,任何不一致都将是有意识的对必要性的响应。 (我认为保持角落案件的易读性是必要的。)
当以这种方式处理时,这些不一致,反直觉,加强了整体的凝聚力,而不是破坏它。
PEP-8更简洁地说明了这一点(因此,更有用:) :):
但最重要的是:知道何时不一致 - 有时是风格 指南只是不适用。如有疑问,请使用您的最佳判断。看 在其他例子,并决定什么看起来最好。并且毫不犹豫地问!
打破特定规则的两个充分理由:
应用规则会降低代码的可读性,即使对于习惯阅读遵守规则的代码的人也是如此。
- 醇>
与周围的代码保持一致也会破坏它(可能是出于历史原因) - 尽管这也是一个清理别人的混乱的机会(真正的XP风格)。
答案 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”是从属部分。