ここに問題があります: 私のプログラムは 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 ) )
たとえば、inputbox に「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
、この文字列で関数を使用すると、式の数値ではなくオブジェクトが返されます。