__getattr__ не создает атрибут, выдает ошибку KeyError
class Mazda:
wheel = "r-17"
color = "black"
engine = 2.0
doors = 4
gear_box = "manual"
def __getattribute__(self, value):
print ("__getattribute__")
if value == "color":
return "Отвали"
else:
return object.__getattribute__ (self, value)
def __getattr__ (self, value):
print ("__getattr__")
self.__dict__[value] == 0
return 0
a = Mazda ()
print (a.lights)
В консоли получаю:
Traceback (most recent call last):
File "c:\Users\Yegor Tverytinov\Desktop\VSC\Example 2.py", line 28, in <module>
print (a.lights)
File "c:\Users\Yegor Tverytinov\Desktop\VSC\Example 2.py", line 23, in __getattr__
self.__dict__[value] == 0
KeyError: 'lights'
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Ошибка здесь:
self.__dict__[value] == 0
^^
Вы вместо присваивания делаете сравнение. А нужно присваивать:
self.__dict__[value] = 0
Для того чтобы сравнить значение происходит ещё раз вызов __getattribute__, но на этот раз без последующего вызова __getattr__, чтобы всё это не зациклилось. Ну и выходит исключение.