Como modificar a classe __dict__ (um mappingproxy)? [duplicado
Esta pergunta já tem uma resposta aqui:
Como atribuir um novo atributo de classe via __dict __? 1 respostaEu quero aplicar um decorador a todos os métodos de uma classe. Como não tenho o código fonte da classe, não posso aplicar diretamente o decorador. Quero chamar alguma função que aceite a classe e adicione os decoradore
Mas o problema étestclass.__dict__
é ummappingproxy
object e não suporta nenhuma atribuição ou modificação, pelo menos diretamente. Portanto, a questão é como evitar essa restrição irritante e aplicar o decorador?
Aqui está o código da tentativa com falha:
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'])
Erro
TypeError: 'mappingproxy' object does not support item assignment