だから私は同様の質問を見て、これに対するいくつかの解決策を見つけましたが、これを行う方法がよくわかりません.
私がやろうとしているのは、文字列からクラスにメソッドを追加することです。メソッドでこれを行うことができますが、追加のメソッドで属性としてsetattr()
使用することはできません。self
以下に例を示します: (変数名については申し訳ありませんが、アイデアをモックアップするときは常に yolo を使用します)
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()
これを返します:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: yolo() takes exactly 1 argument (0 given)
そして、次のs = 'def yolo():\n\tself.extra = "Hello"\n\tprint self.extra'
結果が得られた場合:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2, in yolo
NameError: global name 'self' is not defined
これは基本的に、クラスのメソッドを動的に作成できないことを意味します。これは、クラスの残りの部分がアクセスできる変数にメソッドがアクセスできないため、悪い習慣であり、pythonic ではないことがわかっています。
助けていただければ幸いです。