Задать вопрос
@vasay06

Как исправить ошибку чтения аргумента?

class Alpha:
   def __init__(self):
      self.list = [1,2,3]

   def __getattribute__(self, name):
      print(name)
      
   def __setattr__(self, name, txt):
      print(type(txt), name)
      if(name == "list" and type(txt) == list):
         self.__dict__["list"] = []
         for k in txt:
            if(type(k) == str):
               self.__dict__["list"].append(k)
         print("успешно изменено поле, бегом проверять")
      else:
         print("Нельзя устанавливать другие поля или заменять list не списком")



A = Alpha()
A.name = 121
A.list = [1,2,"Слово1", 2, "Слово2"]

При выполнении данного кода возникает ошибка. Тут, как понял, getattribute улавливает изменения над элементами dict и выдает ошибку, но точно не уверен. Подскажите как ее исправить
  • Вопрос задан
  • 124 просмотра
Подписаться 2 Простой Комментировать
Решения вопроса 1
@va_k
Вы потеряли в функции возвращаемое значение. Надо так
def __getattribute__(self, name):
      print(name)
      return super().__getattribute__(name)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
__getattribute__() вызывается ДО проверки содержимого __dict__. В большинстве случаев нужен __getattr__().
А вообще, что ты пытаешься сделать?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы