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

Esc*_*alo 48 python coding-style naming-conventions

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

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

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

class NASAJPL():  # 1
class NASA_JPL(): # 2
class NasaJpl():  # 3
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ead 66

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

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

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

个人而言,我会找到NasaJpl()最简单的扫描,因为大写字母标记轻松字边界,并给予名称的独特的形状.

  • 我同意.PEP-8不是神圣的法律.打破任何规则比编码任何彻头彻尾的野蛮行为.(在哪个类别中我会算'NASAJPL()`.) (19认同)
  • @bobince:这就是 PEP-8 所表述的内容。恕我直言,最重要的部分之一!“风格指南是关于一致性的。与本风格指南的一致性很重要。项目内的一致性更重要。一个模块或功能内的一致性是最重要的。”(PEP-8) (5认同)

Dan*_*nes 22

正如其他人所指出的那样,NASAJPL可能是PEP-8批准的形式.

然而,恰恰相反,我可能会使用NasaJPL.因为如果你正在阅读它,你会将"NASA"作为单个单词发音,而将"JPL"发音.

你可以提出一个与PEP-8一致的论点,因为"NASA"是一个缩写,但"JPL"是一个缩写(或初始主义,如果你想变得迂腐).

  • 这似乎是一个非常合理的论点。 (2认同)

Chr*_*heD 10

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

class NASAJPL:
Run Code Online (Sandbox Code Playgroud)

编辑:当你结合两个首字母缩略词时,你想要将功能划分为模块(你永远不知道你何时将下一个功能添加到你的程序中):

from NASA import JPL
from NASA import ARC
Run Code Online (Sandbox Code Playgroud)

  • 国家航空航天局喷气推进实验室.不管怎样,或者我是一个适当的极客并且阅读过多的东西. (2认同)
  • #1的问题是`NASAJPL`,`JPL`和`ARC`看起来像符号常数,在PEP8和更广泛的世界中都使用全部大写. (2认同)

Ada*_*erg 8

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


das*_*ang 6

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

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

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

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


Tri*_*ley 6

你做得对.

如果ChristophD分割成一个模块层次结构的建议是不是一种可行的选择,那么我建议你#2形式(class NASA_JPL ():)是最清晰的,PEP-8被定罪.

不完全是...

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

[...]几乎无一例外

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

艾默生将PEP-8应用于现实......

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

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

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

但最重要的是:知道何时不一致 - 有时风格指南不适用.如有疑问,请使用您的最佳判断.查看其他示例并确定最佳效果.并且不要犹豫!

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

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

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