Объясните мне, почему возникает рекурсия в методе
__getattr__
?
class PluginSettings(object):
def __init__(self, plugin, defaults = {}):
self._plugin = plugin
self._defaults = defaults
def __getattr__(self, attr):
default = self._defaults.get(attr)
self._plugin.config.get(attr, default) # Получение свойства из стороннего источника
def __setattr__(self, attr, value):
if attr in self.__dict__:
self.__dict__[attr] = value
else:
self._plugin.config.set_key(attr, value) # Сохранение свойства в сторонний источник
class Plugin(BasePlugin):
def __init__(self, parent, config, name):
BasePlugin.__init__(self, parent, config, name)
default_settings = {
'a': 1,
'b': 2
}
self.settings = PluginSettings(self, default_settings)
plugin = Plugin()
print(plugin.settings.a)
print(plugin.settings.z)
Если убрать
__setattr__
это проходит.