你如何为PEP 8命名一个名字是缩写的类?

我试图坚持Python代码的风格指南(也称为PEP 8 )。 因此,命名类的首选方法是使用CamelCase:

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

如果我的class级名称是由两个缩略词组成的,那么我应该如何与PEP 8保持一致? 例如,如果我的class级名称是“NASA JPL”,你会怎么说呢?

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

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

PEP-8覆盖了这个(至less部分):

注意:在CapWords中使用缩写时,请缩写缩写的所有字母。 因此HTTPServerErrorHttpServerError

我想读的意思是根据PEP-8, NASAJPL()是推荐的名称。

就个人而言,我会发现NasaJpl()是最容易扫描的,因为大写字母很容易标记字的边界,并给名称一个独特的形状。

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

然而,恰恰相反,我可能会使用NasaJPL。 因为如果你正在阅读,你会把“NASA”当作一个单词来读,而你所说的“JPL”就是这样。

你可以说这与PEP-8是一致的,因为“NASA”是一个缩写,但是“JPL”是一个缩写(如果你想迂腐 ,就是初始化)。

在这种情况下, #1看起来很好(如果它真的是一个缩写)。 出于好奇,它代表什么(和什么是类实例,也许一个module将是更合适的除数)?

 class NASAJPL: 

编辑 :当你合并两个缩写词的机会是你想分开模块function(你永远不知道什么时候你的程序中添加下一个function):

 from NASA import JPL from NASA import ARC 

我也工作在一个缩写的环境。 我倾向于更倾向于第三种forms,因为尽pipe它将首字母缩略词的部分缩小,但它清楚地描述了部分名称。 它也避免了混淆,因为名字的一部分是缩写,部分是单词。

我倾向于使用#3。 它看起来很奇怪,但你(有点)习惯了。 经过一连串的缩略词之后,我经历了这么长时间,例如NPCAIXMLParser就是一个。 我决定,NpcAiXmlParser从这以后就更容易阅读,尽pipe看到这些低层次的东西有时看起来很怪异。

就“标准”而言,我倾向于将这些实体看作“单词”,并将其用作大写字母。 例如,如果我有一个代表某个NPC(非玩家angular色)的局部variables,我会将其命名为“npc”而不是“nPC”。

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

注意:在CapWords中使用缩写时,请缩写缩写的所有字母。 因此HTTPServerError比HttpServerError好。

你正在做。

如果ChristophD 把它分解成一个模块层次结构build议不是一个可行的select,那么我build议你的#2表单( class NASA_JPL ():是最清晰的,PEP-8被定罪。

不完全是…

这就是说…我不认为PEP-8为了让你使用这个选项仍然坚持它的核心原则。 正如你在原来的问题中指出的那样,“骆驼类名”指南的第一句开始:

几乎没有例外,

PEP-8的“基本原则”声明,正如丹所指的“愚蠢的一致性”一样 ,声明易读性和可理解性是PEP-8build议的主要目标。 PEP-8是为这些目标服务的既定成功模式的集合。

艾默生在应用PEP-8到现实…

从根本上讲,任何制度的方方面面都必然与整体的性格不符。 当一个系统能够很好地和一致地使用一个风格指南的build议时,任何不一致都将是有意识的反应。 (我认为保持angular落案件的可读性是必要的。)

当这样处理时,那些不一致的东西,直觉地反而强化了整体的凝聚力,而不是破坏它。

PEP-8更简洁地陈述了这一点(因此更有用:)):

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

两个很好的理由来打破一个特定的规则:

  1. 当应用这个规则时,即使对于习惯于阅读规则的代码的人来说,代码的可读性也会降低。

  2. 为了与周围的代码一致(也许是出于历史原因) – 虽然这也是一个清理别人的混乱(真正的XP风格)的机会。

数字1对我来说太难了 – 没有办法说明这是两个缩略词。

2号违反了PEP8,但看起来不错。 记住“愚蠢的一致性是小心灵的大地精”:)

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

这取决于首字母缩略词。 另一种select是class NASAJpl():它使得看起来“NASA”是主要部分,“JPL”是从属部分。