事情是这样的:我的程序是一个用 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”上输入并按下按钮,textbox3 会显示结果“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
在这个字符串中使用函数时,它返回一个对象,而不是表达式的数值。