2011-02-23 87 views
5

PEP 8中,声明“常量通常在模块级别上定义[...]”。这对于标准库是有意义的,其中常数倾向于涉及整个模块而不是特定的类(例如zlib.MAX_WBITSre.UNICODE)。我目前正在编写一个模块,但是,常量都与各个类相关。应该在模块级别声明类特定的“常量”吗?

该模块旨在允许Python程序使用特定于应用程序的序列化格式,其中将数据块排列为“块”,并将这些块进一步排列为“区域”。块和区域的大小是有用的常量,我一直在做班级属性,直到我在PEP 8中穿过那条线。

我倾向于让它们保持原样(PEP 8 说“愚蠢的一致性是小心灵的大地精”,毕竟),但要确保我不会因为这样做而严重违反用户的期望。 (该模块尚未发布,所以向后兼容性不是一个问题。)

作为参考,“PEP 8”风格。

CHUNK_SIZE_X = 16 
CHUNK_SIZE_Z = 16 
REGION_SIZE_X = 32 
REGION_SIZE_Z = 32 

def Chunk(object): 
    # magic happens here 

def Region(object): 
    # magic happens here 

...和我目前的“类为主”风格...

def Chunk(object): 
    SIZE_X = 16 
    SIZE_Z = 16 

    # magic happens here 

def Region(object): 
    SIZE_X = 32 
    SIZE_Z = 32 

    # magic happens here 

回答

7

显然,基于类的常量属于类。坚持你的第二个例子。记住PEP8不是从全能者传下来的。这只是一个很好的想法:传统,理性和经验可以调节经文的意义。

Hungrarian_prefix_notation是不必要的。这是你上课的原因之一。

+0

正如我所说,我已经倾向于违反PEP。我只是想确保这样做符合其他人的期望。听起来像它会。 :-) – 2011-02-23 21:50:26

+0

这甚至都不是违规行为 - PEP 8有一个原因,就像“通常”和“一般”一样撒满了警告词。 – ncoghlan 2011-02-23 22:19:46

+0

@ncoghlan:绝对。这是我使用“全能”和“圣经”等词语的要点。 – 2011-02-23 23:01:20

0

谁消耗常数?你说“我正在编写一个模块,但是,常量都与单个类有关。”所以把这个常数放在课堂上。

+0

常量正在模块内消耗,并假定对模块的用户至少偶尔有用。 – 2011-02-23 21:51:11

+0

@Ben Blank:根据你的描述,我会把它们放在模块级别上,但我对它没有强烈的感受。我不认为这是对与错的问题。 – 2011-02-23 21:58:09