2014-11-04 74 views
3

我想編寫一個工具類來從python中的配置文件讀取。如何在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

Python不是Java,通常你只是在你要實例化的時候使用一個類。最有可能的是,你想編寫一個包含免費函數的工具*模塊*。 – 2014-11-04 06:41:59

+0

另外,你應該在Python中使用變量'snake_case_names',而不是'camelCase' ... – pradyunsg 2014-11-04 06:48:45

回答

2

一般情況下,它幾乎總是最好使用@classmethod@staticmethod

然後,configParsercls參數的屬性:

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取代。

+0

類方法和靜態方法有什麼區別 – station 2014-11-04 06:48:21

+2

哇!有一個與SO完全相同的標題的問題:http://stackoverflow.com/q/136097/1931274 – pradyunsg 2014-11-04 06:50:17

+0

謝謝〜男生 – station 2014-11-04 06:54:49

0

如果要在文件中創建靜態變量,請在類定義之前創建。一般在python靜態變量中聲明爲大寫變量名。

爲了您的例子中,你可以使用

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

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

對不起,更新:) – Nilesh 2014-11-04 06:54:08

1

類和實例屬性不參與方法中的變量解析過程。如果你想訪問它們,你需要使用普通的屬性查找語法:

WebPageTestConfigUtils.configParser.read(self.configFilePath) 

也就是說,你不應該爲此使用一個類。你似乎習慣於一種語言,一切都必須在課堂上。 Python不能這樣工作;你應該只使用一個普通函數的模塊。