2010-12-07 5 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

답변

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

왜 당신이 정말로 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) 

것은 당신이 파이썬 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 
관련 문제