2014-11-04 2 views
3

파이썬의 설정 파일에서 읽을 유틸리티 클래스를 작성하고 싶습니다.Python에서 정적 유틸리티 클래스를 올바르게 정의하는 방법

import os,ConfigParser 

class WebPageTestConfigUtils: 

    configParser = ConfigParser.RawConfigParser() 
    configFilePath = (os.path.join(os.getcwd(),'webPageTestConfig.cfg')) 

    @staticmethod 
    def initializeConfig(): 
     configParser.read(self.configFilePath) 

    @staticmethod 
    def getConfigValue(key): 
     return configParser.get('WPTConfig', key) 

def main(): 
    WebPageTestConfigUtils.initializeConfig() 
    print WebPageTestConfigUtils.getConfigValue('testStatus') 

if __name__ =='__main__': 
    main() 

실행시 오류가 발생합니다.

NameError: global name 'configParser' is not defined

이유는 정적 멤버를 인식 할 수 없습니다 파이썬입니다.

+2

파이썬은 자바가 아니며 일반적으로 클래스를 인스턴스화하려는 것일뿐입니다. 아마, 당신은 자유 함수를 담고있는 유틸리티 * 모듈 *을 작성하고 싶을 것이다. –

+0

또한,'camelCase'가 아닌 Python 변수에'snake_case_names'를 사용해야합니다 ... – pradyunsg

답변

2

를 사용할 수 있습니다.

class WebPageTestConfigUtils(object): 

    configParser = ConfigParser.RawConfigParser() 
    configFilePath = (os.path.join(os.getcwd(),'webPageTestConfig.cfg')) 

    @classmethod 
    def initializeConfig(cls): 
     cls.configParser.read(cls.configFilePath) 

    @classmethod 
    def getConfigValue(cls, key): 
     return cls.configParser.get('WPTConfig', key) 

또한 self의 사용량이 cls로 대체됩니다 참고 :

그런 configParsercls 인수의 속성입니다.

+0

클래스 메소드와 정적 메소드의 차이점은 무엇입니까 – station

+2

와우! 너무 똑같은 제목의 질문이 있습니다. http://stackoverflow.com/q/136097/1931274 – pradyunsg

+0

thanks ~ Schoolboy – station

0

파일에 정적 변수를 만들려면 클래스 정의 전에 만듭니다. 일반적으로 파이썬 정적 변수에서 UPPERCASE 변수 이름으로 선언하십시오. 귀하의 예를 들어

당신은 거의 항상 더 나은 @staticmethod 이상 @classmethod을 사용하는 것입니다, 일반적으로

CONFIGPARSER = ConfigParser.RawConfigParser() 
CONFIGFILEPATH = (os.path.join(os.getcwd(),'webPageTestConfig.cfg')) 

... 
... 
@staticmethod 
def initializeConfig(): 
    CONFIGPARSER.read(CONFIGFILEPATH) 
... 
... 
+0

죄송합니다, updated :) – Nilesh

1

클래스 및 인스턴스 속성은 메소드 내에서 변수 확인 프로세스에 참여하지 않습니다. 말했다

WebPageTestConfigUtils.configParser.read(self.configFilePath) 

, 당신은이에 대한 모든 클래스를 사용해서는 안됩니다 : 당신이 그들에 액세스하려면, 당신은 일반적인 속성 조회 구문을 사용합니다. 당신은 모든 것이 수업에 있어야하는 언어에 익숙한 것 같습니다. 파이썬은 그런 식으로 작동하지 않습니다. 당신은 그 안에 일반적인 기능을 가진 모듈을 사용해야 만합니다.

관련 문제