У меня есть класс Python следующим образом:
class Base:
def __init__(self, response=20):
self.response = response
def func1(self):
self.response = 10
def func2(self):
self.response = 20
def func3(self):
self.response = 30
Каждый раз, когда значение ответа изменяется, мне нужно, чтобы его захватили.Поэтому я определил метод __setattr__
следующим образом:
class Base:
def __init__(self, response=20):
self.response = response
def __setattr__(self, name, value):
if name == 'response':
print('{} is set to {}'.format(name, value))
def func1(self):
self.response = 10
def func2(self):
self.response = 20
def func3(self):
self.response = 30
Вывод:
=============================================================
In [10]: a = Base()
response is set to 20
In [11]: a.func1()
response is set to 10
In [12]: a.func2()
response is set to 20
Работает очень хорошо.
Теперь я ввел еще один атрибут класса, значение которогоинициализируется поиском по словарю следующим образом:
my_dict = {20:'key1'}
class Base:
def __init__(self, response=20):
self.response = response
self.key = getattr(my_dict,self.response).value
def __setattr__(self, name, value):
if name == 'response':
print('{} is set to {}'.format(name, value))
def func1(self):
self.response = 10
def func2(self):
self.response = 20
def func3(self):
self.response = 30
Это дает сообщение об ошибке:
----> 6 self.key = getattr(my_dict,self.response)
AttributeError: 'Base' object has no attribute 'response'
Что я делаю неправильно. Также, если я удаляю метод __setattr__
,getattr
начинает работать.В чем здесь проблема?