Как изменить класс __dict__ (маппинг-прокси)? [Дубликат]
На этот вопрос уже есть ответ:
Как назначить новый атрибут класса через __dict __? 1 ответЯ хочу применить декоратор к каждому методу в классе. У меня нет исходного кода класса, поэтому я не могу напрямую применить декоратор. Я хочу вызвать некоторую функцию, которая принимает класс и добавляет декораторы.
Но проблема в том,testclass.__dict__
этоmappingproxy
объект, и он не поддерживает какое-либо назначение или изменение, по крайней мере, напрямую. Так что вопрос в том, как избежать этого раздражающего ограничения и применить декоратор?
Вот код неудачной попытки:
class qwer:
def test(self):
print('test')
def decor(func):
def w(*args, **named_args):
print('decor')
func(*args, **named_args)
return w
qwer.__dict__['test'] = decor(qwer.__dict__['test'])
Ошибка
TypeError: 'mappingproxy' object does not support item assignment