我试图用python编写一个简单的对象,它将使用ConfigParser加载设置,将所有项作为字典获取,然后将这些项设置为对象的属性。在
如果我不包含__setattr__方法,这似乎是可行的。我可以打电话”settings.top_旅行“把答案拿回来。但是,一旦我尝试输入__setattr__,我似乎得到了一个错误。在
它看起来相当递归,所以我假设Get正在调用Set,等等。在set属性部分,我希望让它写回配置文件。因此,每当设置属性中的一个发生更改时,它就会被存储回它的来源文件中。在
下面您将找到代码和错误。在import ConfigParser
class settingsFile(object):
def __init__(self):
"""
Reloads the configuration file and returns a dictionary with the
settings :
[config]
top_travel = 250
"""
# Create a configuration object and read in the file
configuration = ConfigParser.ConfigParser()
configuration.read('config/config.cfg')
# Return all the "config" section as a list and convert to a dictionary
self.configuration = dict(configuration.items("config"))
def refresh(self):
self.__init__()
def __getattr__(self, attr):
return self.configuration[attr]
def __setattr__(self, attr, value):
print attr, " is now ", value
# Do some clever storing with ConfigParser
if __name__ == "__main__":
settings = settingsFile()
print settings.top_travel
settings.top_travel = 600
print settings.top_travel
错误:
^{pr2}$