因此,我查看了类似的问题,并找到了一些解决方案,但我无法弄清楚如何做到这一点。
我想要做的是从字符串向类添加一个方法。我可以使用该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
这实质上意味着我不能为类动态创建方法,我知道这是不好的做法并且不符合 Python 标准,因为这些方法将无法访问类的其余部分可以访问的变量。
我很感激任何帮助。