我想编写一个实用程序类来从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无法识别静态成员。
答案 0 :(得分:2)
一般来说,使用@classmethod
而不是@staticmethod
几乎总是更好。
然后,configParser
是cls
参数的一个属性:
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)
...
...