【发布时间】:2018-12-28 21:34:16
【问题描述】:
我正在尝试使用eval() 运行动态代码,但它似乎拒绝基于对象的方法:
def GetHelp():
return 'Help'
class MyClass:
def __init__(self):
self.child = 5
def GetChild():
return self.child
x = eval('Get{}()'.format('Help'))
print(x)
obj = MyClass()
y = eval('obj.Get{}()'.format('Child'))
print(y)
上面的代码给了我:
Help
Traceback (most recent call last):
File "/Users/kakyo/Desktop/0.Dev/playground/python/hello_eval.py", line 14, in <module>
y = eval('obj.Get{}()'.format('Child'))
File "<string>", line 1, in <module>
TypeError: GetChild() takes 0 positional arguments but 1 was given
我尝试将 obj 添加到 locals:
y = eval('obj.Get{}()'.format('Child'), {'obj': obj})
但遇到了同样的错误。
【问题讨论】:
-
为什么会有反对票?
-
这与
eval无关,问题可以用普通的obj.GetChild()复现。