[英]eval() function in object-oriented programming
事情是这样的:我的程序是一个用python / GTK编写的基于GUI的计算器。 在第一个版本中,我没有使用类,因此这里是一段旧代码:
def show(result):
textbox3.set_text( str(result) )
(...) # Update counters, etc.
def on_button_pressed(*args):
input_user = inputbox.get_text()
(...) # parsing of the input
show( eval( input_user ) )
例如,如果我在输入框“ 12 + 3”上键入并按下按钮,则文本框3将显示结果“ 15”。
我已经修改了项目以使用OOP。 这是修改后的代码:
class App:
(...)
def show(self,result):
self.textbox3.set_text( str(result) )
(...) # Update counters, etc.
def on_button_pressed(self,*args):
input_user = self.inputbox.get_text()
(...) # parsing of the input
print input_user
self.show( eval( input_user ) )
使用此代码,textbox3显示结果"<app.c12app.App instance at 0x272e128>"
。 我在这里犯什么错误?
PS:实际代码太大,解析部分大约有50行。 我添加了一行print input_user
来证明解析不会覆盖变量input_user
。 控制台会正确打印已解析的表达式(字符串)。 但是,当我在此字符串中使用eval
函数时,它将返回一个对象,而不是表达式的数值。
可能是几件事。 首先,不要在定义中使用class App():
在class App():
中进行class App:
化,并确保实例化为foo = App()
而不是foo = App
。
我发现了我的错误。 我应该将show函数定义为
def show(self, dummy, result):
独立地,如果我仅将一个参数传递给函数(例如self.show(result)
,似乎python传递了两个“不可见参数”:第一个是“ self”,类的实例,第二个是调用该方法的方法)函数(我不确定函数on_button_pressed或按钮对象),这有点令人困惑...
第一个和第二个参数对我没有用,但是显然我被迫声明它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.