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中使用缩写时,请将缩写的所有字母大写.因此
HTTPServerError
比HttpServerError
.
NASAJPL()
根据PEP-8 ,我认为这是推荐的名称.
个人而言,我会找到NasaJpl()
的最简单的扫描,因为大写字母标记轻松字边界,并给予名称的独特的形状.
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)
我倾向于使用#3.起初看起来很奇怪,但你(有点)习惯了.经过长时间的困难,我遇到了这样的困难,例如NPCAIXMLParser就是其中之一.我认为NpcAiXmlParser更容易阅读并且从那时起就一直这样做,即使看到这些低级的东西有时看起来仍然很奇怪.
就"标准"而言,我倾向于将这些实体视为"单词",并将其视为资本化,因为我会将任何其他单词大写.例如,如果我有一个表示某个NPC(非玩家角色)的局部变量,我会将其命名为'npc'而不是'nPC'.
关于PEP-8,我不同意这一说法; 我发现这个词的最后拼写更可取.
注意:在CapWords中使用缩写时,请将缩写的所有字母大写.因此,HTTPServerError优于HttpServerError.
如果ChristophD的分割成一个模块层次结构的建议是不是一种可行的选择,那么我建议你#2形式(class NASA_JPL ():
)是最清晰的,PEP-8被定罪.
那就是说......我不认为PEP-8需要被诅咒才能使用该选项并仍然坚持其核心原则.正如你在原始问题中指出的那样,"CamelCase类名"指南的第一句开头:
[...]几乎无一例外
PEP-8的"基本原则"声明,正如Dan提到的"愚蠢的一致性[...]"系列,宣称可读性和可理解性是PEP-8建议的主要目标.PEP-8是为这些目标服务的既定成功模式的集合.
从根本上说,任何系统都有必然与整体特征不一致的方面.当系统对样式指南的建议进行良好且一致的使用时,任何不一致都将是对必要性的有意识的回应.(我认为保持角落案件的易读性是必要的.)
当以这种方式处理时,那些不一致的,反直觉的,加强了整体的凝聚力,而不是破坏它.
PEP-8更简洁地说明了这一点(因此,更有用:) :):
但最重要的是:知道何时不一致 - 有时风格指南不适用.如有疑问,请使用您的最佳判断.查看其他示例并确定最佳效果.并且不要犹豫!
打破特定规则的两个充分理由:
应用规则会使代码的可读性降低,即使对于习惯于阅读遵循规则的代码的人也是如此.
为了与周围的代码保持一致,这也破坏了它(可能是出于历史原因) - 尽管这也是一个清理别人的混乱的机会(真正的XP风格).