python setattr无限递归_在python中引入setattr时的递归错误

我试图用python编写一个简单的对象,它将使用

ConfigParser

,将所有项作为字典获取,然后将这些项设置为对象的属性。

如果我

不要

包括

__setattr__

方法。我可以打电话给“settings.top_travel”得到答案。但是,只要我试着

__塞塔特__

,我好像搞错了。

它看起来相当递归,所以我假设

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

错误:

Traceback (most recent call last):

File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 52, in

settings = settingsFile()

File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 37, in __init__

self.configuration = dict(configuration.items("config"))

File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 47, in __setattr__

print self.configuration[attr], " is now ", value

File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 44, in __getattr__

return self.configuration[attr]

File "/home/stuff/Documents/Software/Python/dBControllers v2/dBControllers.py", line 44, in __getattr__

return self.configuration[attr]

......

RuntimeError: maximum recursion depth exceeded

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值