2010-12-07 11 views
6

私はPEP-8クラス名の規則がClassNameであることを知っています。しかし、私たちはしばしば、擬似名前空間、列挙型などとして小さなクラスを使用します。つまり、インスタンス化しようとしている実際のクラスではありません。このような「クラス」は、実際には名前空間/列挙型の名前であるため、小文字の命名規則を採用しました。Pythonスタイル: "namespace"の小文字のクラス名?

他の誰かがこれと同じ目的を達成するための社内スタイルを持っていますか?

例:すべての列挙型と定数については

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

答えて

5

、私は大文字のバージョンを使用することを好みます。

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

クラス名がすべて大文字になっていない場合は、私も問題ありません。何らかの理由で、列挙型の値と結びついているからです。私は常にCountries.NEW_ZEALANDのように使用するつもりです、それはenumであることを私に伝えます。

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

なぜあなたが本当にPEP心配している場合

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 

私が代わりに辞書を使用
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です。

もちろん小文字の名前を使用します。あなたはまた、次の内容のconfigという名前のモジュールを作成することができます

4

api_url = 'http://example.com/api' 
timeout = 1.5 
debug = True 
関連する問題