defmakeNewMethod(clsName):defnew(cls):return Event.__new__(cls,clsName)
return new
动态创建定义的事件类,放到全局作用域中
for clsName in ALL_EVENTS:
_new = makeNewMethod(clsName)
cls = type(clsName,(Event,),dict(__slots__=(),__new__ = _new))
globals()[clsName] = cls
定义事件基类,采用责任链模式动态处理事件
classChainObject(object):def__init__(self,successor=None):
self.successor = successor
defhandle(self,event):assert(isinstance(event,Event)) #之所以创建事件类是为了便于我们判断是不是事件if self.successor:
self.successor.handle(event)
else:
print("Drop event {} for no handler".format(event))