繁体   English   中英

面向对象编程中的eval()函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM