类特定的“常量”是否仍应在模块级别声明?

时间:2011-02-23 19:30:44

标签: python naming-conventions

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

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:0)

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