exec para adicionar uma função em uma classe
Então eu olhei para questões semelhantes, e eu encontrei algumas soluções para isso, mas eu não consigo descobrir como fazer isso.
O que estou tentando fazer é adicionar um método a uma classe de uma string. Eu posso fazer isso com osetattr()
método, mas isso não me deixa usarself
como um atributo no método extra. Aqui está um exemplo: (e peço desculpas pelos nomes das variáveis, eu sempre uso o yolo quando estou fazendo uma ideia)
class what:
def __init__(self):
s = 'def yolo(self):\n\tself.extra = "Hello"\n\tprint self.extra'
exec(s)
setattr(self,"yolo",yolo)
what().yolo()
retorna isso:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: yolo() takes exactly 1 argument (0 given)
e ses = 'def yolo():\n\tself.extra = "Hello"\n\tprint self.extra'
então eu recebo este resultado:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2, in yolo
NameError: global name 'self' is not defined
Isso significa essencialmente que não posso criar dinamicamente métodos para classes, o que sei que é uma prática incorreta e não-tipônica, porque os métodos não poderiam acessar as variáveis às quais o restante da classe tem acesso.
Eu aprecio qualquer ajuda.