如何在Python中正确定义静态实用程序类

时间:2014-11-04 06:35:16

标签: 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

为什么python无法识别静态成员。

3 个答案:

答案 0 :(得分: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替换。

答案 1 :(得分:1)

类和实例属性不参与方法中的变量解析过程。如果要访问它们,则需要使用普通的属性查找语法:

WebPageTestConfigUtils.configParser.read(self.configFilePath)

那就是说,你根本不应该使用课程。你似乎习惯了一种必须在课堂上的语言。 Python无法正常工作;你应该只使用具有普通功能的模块。

答案 2 :(得分:0)

如果要在文件中创建静态变量,请在类定义之前创建。通常在python静态变量中声明为UPPERCASE变量名。

对于您的示例,您可以使用

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

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