2011-02-23 63 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