Благодаря переопределению __iadd__ , обработчики добавляются очень просто: Event += newhandler
У меня есть возможность редактировать код лишь некоторых обработчиков событий, и я хочу добавить вызов своих процедур/функций к другим событиям.
В том месте кода, где я имею возможность править исходник, я написал:
def myHandler():
print "now i got a machine gun!"
targetEvent += myHandler
targetEvent.__repr__ дает такую картину:
set([
<function myHandler at 0x0FE3F230>,
<function myHandler at 0x12122DF0>,
<function myHandler at 0x0FE3FEB0>,
<function myHandler at 0x0FE3FEF0>,
...еще много раз ...
<function myHandler at 0x0FE12370>])
if myHandler in targetEvent._eventHandlers_:
pass
else:
targetEvent += myHandler
Можно, конечно, сделать проверку через поиск подстроки с именем функции в str(targetEvent._eventHandlers_), благо myHandler - это мною управляемое имя, и я могу его сделать уникальным, но, наверное, есть способ проще и изящнее?
Простите, если сумбурно.