2010-12-07 45 views
6

我知道PEP-8類名的約定是ClassName。但我們經常使用小類作爲僞命名空間,枚舉等。換句話說,不是一個真正的類,你要實例化。我們選擇了這種「類」的小寫命名約定,因爲它們確實是名稱空間/枚舉名稱。Python風格:「名稱空間」的小寫類名?

有沒有其他人有內部風格的這個,或其他方式實現相同的事情?

一個例子:

import urllib2 

class config: # pseudo-namespace for module-level config variables 
    api_url = 'http://example.com/api' 
    timeout = 1.5 
    debug = True 

class countries: # pseudo-enum 
    new_zealand = 1 
    united_states = 2 

def func(): 
    if config.debug: 
     print 'Calling func()' 
    return urllib2.urlopen(config.api_url) 
+0

好問題,我只是實現的名字空間這樣一對夫婦天前不知道該怎麼做。我通常會使用一個單獨的模塊,但在這種情況下,我不想。 – FogleBird 2010-12-07 18:34:00

回答

5

對於所有枚舉和常量,我更喜歡使用大寫版本。

class COUNTRIES: # pseudo-enum 
    NEW_ZEALAND = 1 
    UNITED_STATES = 2 

如果類名不是全部大寫,那還是可以的。因爲,任何方式都與枚舉值捆綁在一起。我總是會使用它,如Countries.NEW_ZEALAND,它告訴我它是一個枚舉。

class Countries: # pseudo-enum 
    NEW_ZEALAND = 1 
    UNITED_STATES = 2 
1

爲什麼不

class PseudoNamespace: pass 

config = PseudoNamespace() 
config.api_url = 'http://example.com/api' 
config.timeout = 1.5 
config.debug = True 

countries = PseudoNamespace() 
config.new_zealand = 1 
config.united_states = 2 

如果你真的關心PEP?

2

我用字典來代替:

config = dict(
    api_url = 'http://example.com/api', 
    timeout = 1.5, 
    debug = True) 

countries = dict(
    new_zealand = 1, 
    united_states = 2) 

如果你發現屬性訪問在Python dict繁瑣,嘗試一個attrdict

class attrdict(dict): 
    def __init__(self, *args, **kwargs): 
     dict.__init__(self, *args, **kwargs) 
     self.__dict__ = self 

它允許訪問與那些有效的標識符鍵的字典項作爲屬性,例如config.api_url而不是config["api_url"]

當然,我使用這些小寫字母的名字。

4

您還可以創建一個名爲config,內容如下模塊:

api_url = 'http://example.com/api' 
timeout = 1.5 
debug = True 
相關問題