LINUX.ORG.RU

Помогите найти ошибку

 


0

1
class Config(object):

    def __init__(self):
        super(Config, self).__init__()
        self.config_dict = self.read_config()
        self.config_path = os.path.join(BASEDIR, CONFIG_NAME)

    def get_client_id(self):
        BLA BLA BLA

    def generate_config(self):
        BLA BLA BLA

    def read_config(self):
        BLA BLA BLA

    def write_config(self, custom=None):
        BLA BLA BLA

    def __setattr__(self, name, value):
        if name in self.config_dict:
            self.config_dict[name] = value
            self.write_config()
        else:
            self.__dict__[name] = value

    def __getattr__(self, name):
        if name in self.config_dict:
            return self.config_dict[name]

    def __delattr__(self, name):
        if name in self.config_dict:
            del self.config_dict[name]
            self.write_config()
        else:
            del self.__dict__[name]

Ошибка:

  File "blabla.py", line 49, in __init__
    self.config_path = os.path.join(BASEDIR, CONFIG_NAME)
  File "blabla.py", line 96, in __setattr__
    if name in self.config_dict:
  File "blabla.py", line 103, in __getattr__
    if name in self.config_dict:
  <................>
  File "blabla.py", line 103, in __getattr__
    if name in self.config_dict:
RuntimeError: maximum recursion depth exceeded while calling a Python object

Я просто понять не могу, где тут получается рекурсия, с учетом того, что __getattr__ вызывается только при попытке обращения к несуществующим аттрибутам.



Последнее исправление: fake_heat (всего исправлений: 2)
Ответ на: комментарий от fake_heat

Это было не тебе, а тем кто изучает питон и кому интересно что с этим кодом не так.

true_admin ★★★★★
()

__getattr__ вызывается только при попытке обращения к несуществующим аттрибутам

import facepalm

аттрибутам

атрибут

self.__dict__

Чисто ИМХО, vars(self) приятнее выглядит.

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от fake_heat

А ты пиши на родном, великом и могучем. Пока модераторы не потрут, согласно правилам, возможно успеешь получить ответ.

Virtuos86 ★★★★★
()
Ответ на: комментарий от fake_heat

Правила почитай. Там тоже на кого-то намекают? На ЛОРе хватает не граждан РФ, вот на них я и намекал. Хотя украинцев, наверное, больше всего из них.

Virtuos86 ★★★★★
()

__
__
__
__
__
__
__
__
self
self
self
self
self
self
self
self

Как вы на этом убожестве пишете?

anonymous
()
Ответ на: комментарий от anonymous

а на каком убожестве пишите вы?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.