Getattr на себя не работает, он должен работать?

У меня есть эта очень простая функция внутри объекта:

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

Событие — это событие wxpython. Имена находятся в списке в файле конфигурации, а кнопки в моем графическом интерфейсе настроены на имена функций в этом объекте обработчика событий, который будет обрабатывать нажатие этой кнопки.

Печать работает, печатает, например, "alm_switch_away". Однако вызов функции getattr не работает. Это функция, которую она должна вызывать (с функциями печати, чтобы проверить, попал ли туда код), но ничего не печатается:

def alm_switch_away(self):
    print "HERE!"

Вы видите, что я делаю неправильно?


person linus72982    schedule 30.03.2015    source источник
comment
Определение не работает. Что производит print repr(event.GetEventObject().GetName())?   -  person Martijn Pieters    schedule 30.03.2015


Ответы (1)


Если под не работает вы имеете в виду вместо этого я получаю AttributeError, то вместо этого вам нужно посмотреть на строковое представление, чтобы обнаружить любые -печатные символы в названии события:

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

Если вы имеете в виду на самом деле ничего не происходит, то это потому, что вы никогда ничего не делаете с помощью метода, который искали. Вы не вызываете метод. Добавьте () после вызова getattr():

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

или объединить в одну строку:

getattr(self, event.GetEventObject().GetName())()
person Martijn Pieters    schedule 30.03.2015
comment
Да, вот именно, я не вызывал метод. Я думал, что getattr назвал это сам по себе. Спасибо! - person linus72982; 30.03.2015