2015-03-30 80 views
0

我有一個非常簡單的函數對象內:Getattr對自己不工作,它應該工作嗎?

def ctrl_btn_press(self, event): 
    print event.GetEventObject().GetName() 
    getattr(self, event.GetEventObject().GetName()) 

事件是wxPython的事件。這些名字在一個配置文件的列表中,我的gui中的按鈕被設置爲這個事件處理程序對象中的函數的名稱,它將處理該按鈕的按下。

打印工作,它打印,例如,「alm_switch_away」。但函數調用getattr不起作用。這是函數它應該調用(帶打印功能,以測試代碼「到了那裏」),但沒有獲取印刷:

def alm_switch_away(self): 
    print "HERE!" 

你能看到我在做什麼錯誤?

+0

定義*不起作用*。 'print repr(event.GetEventObject()。GetName())'產生了什麼? – 2015-03-30 18:55:51

回答

2

如果你的意思是簡化版,工作,我得到一個AttributeError代替,那麼你需要在字符串表示輸出看,而不是被發現在事件名稱中的任何非打印字符:

print repr(event.GetEventObject().GetName()) 

如果你的意思是什麼也沒有發生那麼這是因爲你從來沒有用你仰望的方法做任何事情。你不是的調用方法是。在getattr()調用後添加()

event_method = getattr(self, event.GetEventObject().GetName()) 
event_method() 

或合併成一條線:

getattr(self, event.GetEventObject().GetName())() 
+0

是的,就是這樣,我不是在調用這個方法。我認爲getattr自己調用它。謝謝! – linus72982 2015-03-30 19:06:28