Хочу сделать объект-набор переменных, с доступом, и как к словарю и как к объекту со свойствами.
#!/usr/bin/python3
class Conf:
def __init__(self, attrs = None):
if attrs is not None:
self.attrs = attrs
else:
self.attrs = {}
def __setitem__(self, name, value):
self.attrs[name] = value
def __getitem__(self, name):
return self.attrs[name]
def __setattr__(self, name, value):
self.attrs[name] = value
def __getattr__(self, name):
if name not in self.attrs:
return None
return self.attrs[name]
def __delattr__(self, name):
# …
init = {'a': 1, 'b': 2}
c = Conf(init)
Однако __setattr__ срабатывает уже в конструкторе на
self.attrs = attrs
И получается легендарная бесконечная рекурсия.
Как setattr правильно использовать?