events是一个易于使用的事件分派器
pyjon.events的Python项目详细描述
这是什么?
events是对象的一个易于使用的事件分派器元类: 只需将其添加到任何类中,就可以添加事件侦听器和分派事件。
添加侦听器时,可以定义传递给侦听器的参数。 您还可以定义在发出事件时传递给侦听器的参数。
示例
在我们的例子中,我们将定义一个person类。 只需导入模块,并将其添加到类中(python2示例):
from pyjon.events import EventDispatcher class Person(object): __metaclass__ = EventDispatcher def __init__(self, name): # just a sample initialization, you can do whatever you want, of course. self.name = name def run(self, meters=1): print "I'm running for %d meters !" % meters self.emit_event('ran', meters) self.emit_event('moved', meters=meters) def walk(self, meters=1): print "I'm walking for %d meters !" % meters self.emit_event('walked', meters) self.emit_event('moved', meters=meters) def sleep(self): print "sleeping..." self.emit_event('sleeping') time.sleep(5) self.emit_event('sleeped') print "Wow... had a good night !"
对于python3,只需替换这个:
class Person(object): __metaclass__ = EventDispatcher
用这个:
class Person(metaclass = EventDispatcher):
现在,让我们实例化我们的类并订阅事件:
>>> henry = Person('henry') >>> def handle_movement(meters=None): ... print "he moved for %d meters" % meters >>> def handle_person_movement(who, meters=None): ... print "%s moved for %d meters" % (who, meters) >>> henry.add_listener('moved', handle_movement) >>> henry.add_listener('moved', handle_person_movement, "henry") >>> henry.walk(5) I'm walking for 5 meters ! he moved for 5 meters henry moved for 5 meters >>> def handle_advanced_movement(meters, who, movement_type): ... print "%s %s for %d meters" % (who, movement_type, meters) >>> henry.add_listener('walked', handle_advanced_movement, "henry", "walked") >>> henry.add_listener('ran', handle_advanced_movement, "henry", "ran") >>> henry.walk(5) I'm walking for 5 meters ! henry walked for 5 meters he moved for 5 meters henry moved for 5 meters >>> henry.run(5) I'm running for 5 meters ! henry ran for 5 meters he moved for 5 meters henry moved for 5 meters
很简单,不是吗?
更改日志
1.0-未发布
- 初始版本
1.1-首次公开发布
- 支持带有关键字参数的事件
- 添加文档
1.1.1-Bugfix版本
- manifest.in修复程序
- 文档修复
1.2-与Python3兼容!
- 现在可以使用python 3了!