我试图创建动态对象来验证我的配置并将结果呈现为对象。我试图通过创建这样的类来实现这一点:
class SubConfig(object):
def __init__(self, config, key_types):
self.__config = config
self.__values = {}
self.__key_types = key_types
def __getattr__(self, item):
if item in self.__key_types:
return self.__values[item] or None
else:
raise ValueError("No such item to get from config")
def __setattr__(self, item, value):
if self.__config._blocked:
raise ValueError("Can't change values after service has started")
if item in self.__key_types:
if type(value) in self.__key_types[item]:
self.__values[item] = value
else:
raise ValueError("Can't assing value in different type then declared!")
else:
raise ValueError("No such item to set in config")
SubConfig 是配置文件中部分的包装器。Config 可以在程序启动后取消更改值的可能性(您只能在初始化时更改值)。
问题是当我设置任何值时,它会在 getattr 中进入无限循环。正如我所读__getattr__
的那样(首先获取现有的 attr,然后调用__getattr__
)。我正在将我的代码与可用示例进行比较,但我什么也得不到。
我注意到所有问题都是我的构造函数产生的。